1
18 package io.undertow.servlet.handlers.security;
19
20 import io.undertow.security.api.SecurityContext;
21 import io.undertow.server.HttpHandler;
22 import io.undertow.server.HttpServerExchange;
23 import io.undertow.servlet.api.AuthorizationManager;
24 import io.undertow.servlet.api.SingleConstraintMatch;
25 import io.undertow.servlet.handlers.ServletRequestContext;
26 import io.undertow.util.StatusCodes;
27
28 import javax.servlet.DispatcherType;
29 import javax.servlet.ServletRequest;
30 import javax.servlet.http.HttpServletResponse;
31 import java.util.List;
32
33
38 public class ServletSecurityRoleHandler implements HttpHandler {
39
40 private final HttpHandler next;
41 private final AuthorizationManager authorizationManager;
42
43 public ServletSecurityRoleHandler(final HttpHandler next, AuthorizationManager authorizationManager) {
44 this.next = next;
45 this.authorizationManager = authorizationManager;
46 }
47
48 @Override
49 public void handleRequest(final HttpServerExchange exchange) throws Exception {
50 final ServletRequestContext servletRequestContext = exchange.getAttachment(ServletRequestContext.ATTACHMENT_KEY);
51 ServletRequest request = servletRequestContext.getServletRequest();
52 if (request.getDispatcherType() == DispatcherType.REQUEST) {
53 List<SingleConstraintMatch> constraints = servletRequestContext.getRequiredConstrains();
54 SecurityContext sc = exchange.getSecurityContext();
55 if (!authorizationManager.canAccessResource(constraints, sc.getAuthenticatedAccount(), servletRequestContext.getCurrentServlet().getManagedServlet().getServletInfo(), servletRequestContext.getOriginalRequest(), servletRequestContext.getDeployment())) {
56
57 HttpServletResponse response = (HttpServletResponse) servletRequestContext.getServletResponse();
58 response.sendError(StatusCodes.FORBIDDEN);
59 return;
60 }
61 }
62 next.handleRequest(exchange);
63 }
64
65
66 }
67