📄 abstractprocessingfiltertests.java
字号:
public void testNormalOperationWithDefaultFilterProcessesUrl() throws Exception { // Setup our HTTP request MockHttpServletRequest request = createMockRequest(); // Setup our filter configuration MockFilterConfig config = new MockFilterConfig(null, null); // Setup our expectation that the filter chain will not be invoked, as we redirect to defaultTargetUrl MockFilterChain chain = new MockFilterChain(false); MockHttpServletResponse response = new MockHttpServletResponse(); // Setup our test object, to grant access MockAbstractProcessingFilter filter = new MockAbstractProcessingFilter(true); filter.setFilterProcessesUrl("/j_mock_post"); filter.setDefaultTargetUrl("/logged_in.jsp"); filter.setAuthenticationFailureUrl("/failure.jsp"); filter.setAuthenticationManager(new MockAuthenticationManager(true)); filter.afterPropertiesSet(); // Test executeFilterInContainerSimulator(config, filter, request, response, chain); assertEquals("/mycontext/logged_in.jsp", response.getRedirectedUrl()); assertNotNull(SecurityContextHolder.getContext().getAuthentication()); assertEquals("test", SecurityContextHolder.getContext().getAuthentication().getPrincipal().toString()); assertEquals(8*1024, response.getBufferSize()); } public void testStartupDetectsInvalidAuthenticationFailureUrl() throws Exception { AbstractProcessingFilter filter = new MockAbstractProcessingFilter(); filter.setAuthenticationManager(new MockAuthenticationManager()); filter.setDefaultTargetUrl("/"); filter.setFilterProcessesUrl("/j_acegi_security_check"); try { filter.afterPropertiesSet(); fail("Should have thrown IllegalArgumentException"); } catch (IllegalArgumentException expected) { assertEquals("authenticationFailureUrl must be specified", expected.getMessage()); } } public void testStartupDetectsInvalidAuthenticationManager() throws Exception { AbstractProcessingFilter filter = new MockAbstractProcessingFilter(); filter.setAuthenticationFailureUrl("/failed.jsp"); filter.setDefaultTargetUrl("/"); filter.setFilterProcessesUrl("/j_acegi_security_check"); try { filter.afterPropertiesSet(); fail("Should have thrown IllegalArgumentException"); } catch (IllegalArgumentException expected) { assertEquals("authenticationManager must be specified", expected.getMessage()); } } public void testStartupDetectsInvalidDefaultTargetUrl() throws Exception { AbstractProcessingFilter filter = new MockAbstractProcessingFilter(); filter.setAuthenticationFailureUrl("/failed.jsp"); filter.setAuthenticationManager(new MockAuthenticationManager()); filter.setFilterProcessesUrl("/j_acegi_security_check"); try { filter.afterPropertiesSet(); fail("Should have thrown IllegalArgumentException"); } catch (IllegalArgumentException expected) { assertEquals("defaultTargetUrl must be specified", expected.getMessage()); } } public void testStartupDetectsInvalidFilterProcessesUrl() throws Exception { AbstractProcessingFilter filter = new MockAbstractProcessingFilter(); filter.setAuthenticationFailureUrl("/failed.jsp"); filter.setAuthenticationManager(new MockAuthenticationManager()); filter.setDefaultTargetUrl("/"); filter.setFilterProcessesUrl(null); try { filter.afterPropertiesSet(); fail("Should have thrown IllegalArgumentException"); } catch (IllegalArgumentException expected) { assertEquals("filterProcessesUrl must be specified", expected.getMessage()); } } public void testSuccessLoginThenFailureLoginResultsInSessionLosingToken() throws Exception { // Setup our HTTP request MockHttpServletRequest request = createMockRequest(); // Setup our filter configuration MockFilterConfig config = new MockFilterConfig(null, null); // Setup our expectation that the filter chain will not be invoked, as we redirect to defaultTargetUrl MockFilterChain chain = new MockFilterChain(false); MockHttpServletResponse response = new MockHttpServletResponse(); // Setup our test object, to grant access MockAbstractProcessingFilter filter = new MockAbstractProcessingFilter(true); filter.setFilterProcessesUrl("/j_mock_post"); filter.setDefaultTargetUrl("/logged_in.jsp"); // Test executeFilterInContainerSimulator(config, filter, request, response, chain); assertEquals("/mycontext/logged_in.jsp", response.getRedirectedUrl()); assertNotNull(SecurityContextHolder.getContext().getAuthentication()); assertEquals("test", SecurityContextHolder.getContext().getAuthentication().getPrincipal().toString()); assertEquals(8*1024, response.getBufferSize()); // Now try again but this time have filter deny access // Setup our HTTP request // Setup our expectation that the filter chain will not be invoked, as we redirect to authenticationFailureUrl chain = new MockFilterChain(false); response = new MockHttpServletResponse(); // Setup our test object, to deny access filter = new MockAbstractProcessingFilter(false); filter.setFilterProcessesUrl("/j_mock_post"); filter.setAuthenticationFailureUrl("/failed.jsp"); // Test executeFilterInContainerSimulator(config, filter, request, response, chain); assertNull(SecurityContextHolder.getContext().getAuthentication()); } public void testSuccessfulAuthenticationButWithAlwaysUseDefaultTargetUrlCausesRedirectToDefaultTargetUrl() throws Exception { // Setup our HTTP request MockHttpServletRequest request = createMockRequest(); request.getSession().setAttribute(AbstractProcessingFilter.ACEGI_SAVED_REQUEST_KEY, makeSavedRequestForUrl()); // Setup our filter configuration MockFilterConfig config = new MockFilterConfig(null, null); // Setup our expectation that the filter chain will be invoked, as we want to go to the location requested in the session MockFilterChain chain = new MockFilterChain(true); MockHttpServletResponse response = new MockHttpServletResponse(); // Setup our test object, to grant access MockAbstractProcessingFilter filter = new MockAbstractProcessingFilter(true); filter.setFilterProcessesUrl("/j_mock_post"); filter.setDefaultTargetUrl("/foobar"); assertFalse(filter.isAlwaysUseDefaultTargetUrl()); // check default filter.setAlwaysUseDefaultTargetUrl(true); assertTrue(filter.isAlwaysUseDefaultTargetUrl()); // check changed // Test executeFilterInContainerSimulator(config, filter, request, response, chain); assertEquals("/mycontext/foobar", response.getRedirectedUrl()); assertNotNull(SecurityContextHolder.getContext().getAuthentication()); } public void testSuccessfulAuthenticationCausesRedirectToSessionSpecifiedUrl() throws Exception { // Setup our HTTP request MockHttpServletRequest request = createMockRequest(); request.getSession().setAttribute(AbstractProcessingFilter.ACEGI_SAVED_REQUEST_KEY, makeSavedRequestForUrl()); // Setup our filter configuration MockFilterConfig config = new MockFilterConfig(null, null); // Setup our expectation that the filter chain will be invoked, as we want to go to the location requested in the session MockFilterChain chain = new MockFilterChain(true); MockHttpServletResponse response = new MockHttpServletResponse(); // Setup our test object, to grant access MockAbstractProcessingFilter filter = new MockAbstractProcessingFilter(true); filter.setFilterProcessesUrl("/j_mock_post"); // Test executeFilterInContainerSimulator(config, filter, request, response, chain); assertEquals(makeSavedRequestForUrl().getFullRequestUrl(), response.getRedirectedUrl()); assertNotNull(SecurityContextHolder.getContext().getAuthentication()); assertEquals(8*1024, response.getBufferSize()); } /** * SEC-297 fix. */ public void testFullDefaultTargetUrlDoesNotHaveContextPathPrepended() throws Exception { MockHttpServletRequest request = createMockRequest(); MockFilterConfig config = new MockFilterConfig(null, null); MockFilterChain chain = new MockFilterChain(true); MockHttpServletResponse response = new MockHttpServletResponse(); // Setup our test object, to grant access MockAbstractProcessingFilter filter = new MockAbstractProcessingFilter(true); filter.setFilterProcessesUrl("/j_mock_post"); filter.setDefaultTargetUrl("http://monkeymachine.co.uk/"); filter.setAlwaysUseDefaultTargetUrl(true); executeFilterInContainerSimulator(config, filter, request, response, chain); assertEquals("http://monkeymachine.co.uk/", response.getRedirectedUrl()); assertNotNull(SecurityContextHolder.getContext().getAuthentication()); } //~ Inner Classes ================================================================================================== private class MockAbstractProcessingFilter extends AbstractProcessingFilter { private AuthenticationException exceptionToThrow; private boolean grantAccess; public MockAbstractProcessingFilter(boolean grantAccess) { this.grantAccess = grantAccess; this.exceptionToThrow = new BadCredentialsException("Mock requested to do so"); } public MockAbstractProcessingFilter(AuthenticationException exceptionToThrow) { this.grantAccess = false; this.exceptionToThrow = exceptionToThrow; } private MockAbstractProcessingFilter() { super(); } public Authentication attemptAuthentication(HttpServletRequest request) throws AuthenticationException { if (grantAccess) { return new UsernamePasswordAuthenticationToken("test", "test", new GrantedAuthority[] {new GrantedAuthorityImpl("TEST")}); } else { throw exceptionToThrow; } } public String getDefaultFilterProcessesUrl() { return "/j_mock_post"; } public void init(FilterConfig arg0) throws ServletException {} public boolean requiresAuthentication(HttpServletRequest request, HttpServletResponse response) { return super.requiresAuthentication(request, response); } } private class MockFilterChain implements FilterChain { private boolean expectToProceed; public MockFilterChain(boolean expectToProceed) { this.expectToProceed = expectToProceed; } private MockFilterChain() { super(); } public void doFilter(ServletRequest request, ServletResponse response) throws IOException, ServletException { if (expectToProceed) { assertTrue(true); } else { fail("Did not expect filter chain to proceed"); } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -