}
@Test
public void testRequestHeaderProxy() throws Exception{
RequestHeaderAuthenticationFilterConfig config =
new RequestHeaderAuthenticationFilterConfig();
config.setClassName(GeoServerRequestHeaderAuthenticationFilter.class.getName());
config.setName(testFilterName4);
config.setRoleServiceName("rs1");
config.setPrincipalHeaderAttribute("principal");
config.setRoleSource(PreAuthenticatedUserNameRoleSource.RoleService);
config.setUserGroupServiceName("ug1");
config.setPrincipalHeaderAttribute("principal");
config.setRolesHeaderAttribute("roles");;
getSecurityManager().saveFilter(config);
prepareFilterChain(pattern,
testFilterName4);
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());
for (PreAuthenticatedUserNameRoleSource rs : PreAuthenticatedUserNameRoleSource.values()) {
config.setRoleSource(rs);
getSecurityManager().saveFilter(config);
request= createRequest("/foo/bar");
response= new MockHttpServletResponse();
chain = new MockFilterChain();
request.setHeader("principal", testUserName);
if (rs.equals(PreAuthenticatedUserNameRoleSource.Header)) {
request.setHeader("roles", derivedRole+";"+rootRole);
}
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 (PreAuthenticatedUserNameRoleSource rs : PreAuthenticatedUserNameRoleSource.values()) {
config.setRoleSource(rs);
getSecurityManager().saveFilter(config);
config.setRoleSource(rs);
request= createRequest("/foo/bar");
response= new MockHttpServletResponse();
chain = new MockFilterChain();
request.setHeader("principal", "unknwon");
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("unknwon", auth.getPrincipal());
}
// test disabled user
updateUser("ug1", testUserName, false);
config.setRoleSource(PreAuthenticatedUserNameRoleSource.UserGroupService);
getSecurityManager().saveFilter(config);
request= createRequest("/foo/bar");
request.setHeader("principal", testUserName);
response= new MockHttpServletResponse();
chain = new MockFilterChain();