View Javadoc

1   package com.atlassian.asap.it;
2   
3   import com.atlassian.asap.api.server.http.RequestAuthenticator;
4   import com.atlassian.asap.core.server.filter.AbstractRequestAuthenticationFilter;
5   import com.atlassian.asap.core.server.filter.WhitelistRequestAuthorizationFilter;
6   import com.atlassian.asap.core.server.http.RequestAuthenticatorImpl;
7   import com.atlassian.asap.core.validator.JwtClaimsValidator;
8   import com.atlassian.asap.core.validator.JwtValidator;
9   import com.atlassian.asap.core.validator.JwtValidatorImpl;
10  import com.atlassian.asap.nimbus.parser.NimbusJwtParser;
11  import com.google.common.collect.ImmutableSet;
12  import org.eclipse.jetty.server.Server;
13  import org.eclipse.jetty.servlet.FilterHolder;
14  import org.eclipse.jetty.servlet.ServletContextHandler;
15  import org.junit.AfterClass;
16  import org.junit.BeforeClass;
17  
18  import javax.servlet.DispatcherType;
19  import javax.servlet.Filter;
20  import javax.servlet.FilterChain;
21  import javax.servlet.FilterConfig;
22  import javax.servlet.ServletException;
23  import javax.servlet.ServletRequest;
24  import javax.servlet.ServletResponse;
25  import javax.servlet.http.HttpServletResponse;
26  import java.io.IOException;
27  import java.net.URI;
28  import java.time.Clock;
29  import java.util.EnumSet;
30  import java.util.Set;
31  
32  public class ServletFilterIntegrationTest extends BaseIntegrationTest {
33      private static final Set<String> AUTHORIZED_SUBJECTS = ImmutableSet.of(ISSUER1); // subject matches issuer
34      private static final Set<String> AUTHORIZED_ISSUERS = ImmutableSet.of(ISSUER1);
35  
36      private static Server server;
37  
38      @Override
39      protected URI getUrlForResourceName(String resourceName) {
40          return URI.create("http://localhost:9000/" + resourceName);
41      }
42  
43      @BeforeClass
44      public static void startHttpServer() throws Exception {
45          JwtValidator jwtValidator = new JwtValidatorImpl(PUBLIC_KEY_PROVIDER,
46                  new NimbusJwtParser(),
47                  new JwtClaimsValidator(Clock.systemUTC()),
48                  AUDIENCE);
49          final RequestAuthenticator requestAuthenticator = new RequestAuthenticatorImpl(jwtValidator);
50  
51          Filter authenticationFilter = new AbstractRequestAuthenticationFilter() {
52              @Override
53              protected RequestAuthenticator getRequestAuthenticator(FilterConfig filterConfig) {
54                  return requestAuthenticator;
55              }
56          };
57          Filter authorizationFilter = new WhitelistRequestAuthorizationFilter(AUTHORIZED_SUBJECTS, AUTHORIZED_ISSUERS);
58  
59          ServletContextHandler servletContext = new ServletContextHandler(ServletContextHandler.SESSIONS);
60          servletContext.addFilter(new FilterHolder(authenticationFilter), "/*",
61                  EnumSet.allOf(DispatcherType.class));
62          servletContext.addFilter(new FilterHolder(authorizationFilter), "/*", EnumSet.allOf(DispatcherType.class));
63  
64          servletContext.addFilter(ResourceFilter.class, "/" + RESOURCE, EnumSet.allOf(DispatcherType.class));
65  
66          server = new Server(9000);
67          server.setHandler(servletContext);
68          server.start();
69      }
70  
71      @AfterClass
72      public static void stopHttpServer() throws Exception {
73          server.stop();
74      }
75  
76      public static class ResourceFilter implements Filter {
77          @Override
78          public void init(FilterConfig filterConfig) throws ServletException {
79              // nothing
80          }
81  
82          @Override
83          public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
84                  throws IOException, ServletException {
85              ((HttpServletResponse) response).setStatus(200);
86          }
87  
88          @Override
89          public void destroy() {
90              // nothing
91          }
92      }
93  }