}
@Test
public void testJ2eeProxy() throws Exception{
J2eeAuthenticationFilterConfig config = new J2eeAuthenticationFilterConfig();
config.setClassName(GeoServerJ2eeAuthenticationFilter.class.getName());
config.setName(testFilterName3);
config.setRoleSource(J2EERoleSource.J2EE);
config.setRoleServiceName("rs1");
config.setUserGroupServiceName("ug1");
config.setRolesHeaderAttribute("roles");
getSecurityManager().saveFilter(config);
prepareFilterChain(pattern,
testFilterName3);
modifyChain(pattern, false, true,null);
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());
Authentication auth;
for(J2EERoleSource rs : J2eeAuthenticationBaseFilterConfig.J2EERoleSource.values()) {
config.setRoleSource(rs);
getSecurityManager().saveFilter(config);
// test preauthenticated with various role sources
request= createRequest("/foo/bar");
response= new MockHttpServletResponse();
chain = new MockFilterChain();
request.setUserPrincipal(new Principal() {
@Override
public String getName() {
return testUserName;
}
});
if (rs==J2EERoleSource.Header) {
request.setHeader("roles", derivedRole+";"+rootRole);
}
if(rs==J2EERoleSource.J2EE) {
request.setUserInRole(derivedRole,true);
request.setUserInRole(rootRole,false);
}
getProxy().doFilter(request, response, chain);
assertEquals(HttpServletResponse.SC_OK, response.getErrorCode());
ctx = (SecurityContext)request.getSession(true).getAttribute(
HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY);
assertNotNull(ctx);
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)));
}
// test root
request= createRequest("/foo/bar");
response= new MockHttpServletResponse();
chain = new MockFilterChain();
request.setUserPrincipal(new Principal() {
@Override
public String getName() {
return GeoServerUser.ROOT_USERNAME;
}
});
getProxy().doFilter(request, response, chain);
assertEquals(HttpServletResponse.SC_OK, response.getErrorCode());
ctx = (SecurityContext)request.getSession(true).getAttribute(
HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY);
assertNotNull(ctx);
auth = ctx.getAuthentication();
assertNotNull(auth);
assertNull(SecurityContextHolder.getContext().getAuthentication());
//checkForAuthenticatedRole(auth);
assertEquals(GeoServerUser.ROOT_USERNAME, auth.getPrincipal());
assertTrue(auth.getAuthorities().size()==1);
assertTrue(auth.getAuthorities().contains(GeoServerRole.ADMIN_ROLE));
config.setRoleServiceName(null);
getSecurityManager().saveFilter(config);
// test preauthenticated with active role service
request= createRequest("/foo/bar");
response= new MockHttpServletResponse();