SecurityContextHolder.getContext().setAuthentication(null);
// Test entry point
MockHttpServletRequest request= createRequest("/foo/bar");
MockHttpServletResponse response= new MockHttpServletResponse();
MockFilterChain chain = new MockFilterChain();
getProxy().doFilter(request, response, chain);
assertEquals(HttpServletResponse.SC_FORBIDDEN,response.getErrorCode());
SecurityContext ctx = (SecurityContext)request.getSession(true).getAttribute(
HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY);
assertNull(ctx);
assertNull(SecurityContextHolder.getContext().getAuthentication());
for (org.geoserver.security.config.X509CertificateAuthenticationFilterConfig.J2EERoleSource rs :
org.geoserver.security.config.X509CertificateAuthenticationFilterConfig.J2EERoleSource.values()) {
config.setRoleSource(rs);
getSecurityManager().saveFilter(config);
request= createRequest("/foo/bar");
response= new MockHttpServletResponse();
chain = new MockFilterChain();
if (rs==J2EERoleSource.Header) {
request.setHeader("roles", derivedRole+";"+rootRole);
}
if(rs==J2EERoleSource.J2EE) {
request.setUserInRole(derivedRole,true);
request.setUserInRole(rootRole,false);
}
setCertifacteForUser(testUserName, request);
getProxy().doFilter(request, response, chain);
assertEquals(HttpServletResponse.SC_OK, response.getErrorCode());
ctx = (SecurityContext)request.getSession(true).getAttribute(
HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY);
assertNotNull(ctx);
Authentication auth = ctx.getAuthentication();
assertNotNull(auth);
assertNull(SecurityContextHolder.getContext().getAuthentication());
checkForAuthenticatedRole(auth);
assertEquals(testUserName, auth.getPrincipal());
assertTrue(auth.getAuthorities().contains(new GeoServerRole(rootRole)));
assertTrue(auth.getAuthorities().contains(new GeoServerRole(derivedRole)));
}
// unknown user
for (org.geoserver.security.config.X509CertificateAuthenticationFilterConfig.J2EERoleSource rs :
org.geoserver.security.config.X509CertificateAuthenticationFilterConfig.J2EERoleSource.values()) {
config.setRoleSource(rs);
getSecurityManager().saveFilter(config);
config.setRoleSource(rs);
request= createRequest("/foo/bar");
response= new MockHttpServletResponse();
chain = new MockFilterChain();
if(rs==J2EERoleSource.J2EE) {
request.setUserInRole(derivedRole,false);
request.setUserInRole(rootRole,false);
}
//TODO
setCertifacteForUser("unknown", request);
getProxy().doFilter(request, response, chain);
assertEquals(HttpServletResponse.SC_OK, response.getErrorCode());
ctx = (SecurityContext)request.getSession(true).getAttribute(
HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY);
assertNotNull(ctx);
Authentication auth = ctx.getAuthentication();
assertNotNull(auth);
assertNull(SecurityContextHolder.getContext().getAuthentication());
checkForAuthenticatedRole(auth);
assertEquals("unknown", auth.getPrincipal());
}
// test disabled user
updateUser("ug1", testUserName, false);
config.setRoleSource(org.geoserver.security.config.X509CertificateAuthenticationFilterConfig.J2EERoleSource.UserGroupService);
getSecurityManager().saveFilter(config);
request= createRequest("/foo/bar");
response= new MockHttpServletResponse();
chain = new MockFilterChain();
setCertifacteForUser(testUserName, request);
getProxy().doFilter(request, response, chain);
assertEquals(HttpServletResponse.SC_FORBIDDEN,response.getErrorCode());
ctx = (SecurityContext)request.getSession(true).getAttribute(
HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY);
assertNull(ctx);
assertNull(SecurityContextHolder.getContext().getAuthentication());
updateUser("ug1", testUserName, true);
// Test anonymous
insertAnonymousFilter();
request= createRequest("/foo/bar");
response= new MockHttpServletResponse();
chain = new MockFilterChain();
getProxy().doFilter(request, response, chain);
assertEquals(HttpServletResponse.SC_OK, response.getErrorCode());
// Anonymous context is not stored in http session, no further testing
removeAnonymousFilter();