⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 basicprocessingfiltertests.java

📁 acegi构造安全的java系统
💻 JAVA
字号:
/* Copyright 2004, 2005, 2006 Acegi Technology Pty Limited * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * *     http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package org.acegisecurity.ui.basicauth;import org.acegisecurity.MockAuthenticationEntryPoint;import org.acegisecurity.MockAuthenticationManager;import org.acegisecurity.MockFilterChain;import org.acegisecurity.MockFilterConfig;import org.acegisecurity.context.SecurityContextHolder;import org.acegisecurity.providers.ProviderManager;import org.acegisecurity.providers.dao.DaoAuthenticationProvider;import org.acegisecurity.userdetails.UserDetails;import org.acegisecurity.userdetails.memory.InMemoryDaoImpl;import org.acegisecurity.userdetails.memory.UserMap;import org.acegisecurity.userdetails.memory.UserMapEditor;import org.apache.commons.codec.binary.Base64;import org.jmock.Mock;import org.jmock.MockObjectTestCase;import org.springframework.context.ApplicationEvent;import org.springframework.context.ApplicationEventPublisher;import org.springframework.mock.web.MockHttpServletRequest;import org.springframework.mock.web.MockHttpServletResponse;import org.springframework.mock.web.MockHttpSession;import java.io.IOException;import java.util.Arrays;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.ServletException;import javax.servlet.ServletRequest;/** * Tests {@link BasicProcessingFilter}. * * @author Ben Alex * @version $Id: BasicProcessingFilterTests.java 1496 2006-05-23 13:38:33Z benalex $ */public class BasicProcessingFilterTests extends MockObjectTestCase {    //~ Instance fields ================================================================================================    private BasicProcessingFilter filter;    //~ Constructors ===================================================================================================    public BasicProcessingFilterTests() {        super();    }    public BasicProcessingFilterTests(String arg0) {        super(arg0);    }    //~ Methods ========================================================================================================    private MockHttpServletResponse executeFilterInContainerSimulator(Filter filter, ServletRequest request,        boolean expectChainToProceed) throws ServletException, IOException {        filter.init(new MockFilterConfig());        MockHttpServletResponse response = new MockHttpServletResponse();        Mock mockChain = mock(FilterChain.class);        FilterChain chain = (FilterChain) mockChain.proxy();        mockChain.expects(expectChainToProceed ? once() : never()).method("doFilter");        filter.doFilter(request, response, chain);        filter.destroy();        return response;    }    public static void main(String[] args) {        junit.textui.TestRunner.run(BasicProcessingFilterTests.class);    }    protected void setUp() throws Exception {        super.setUp();        SecurityContextHolder.clearContext();        // Create User Details Service, provider and authentication manager        InMemoryDaoImpl dao = new InMemoryDaoImpl();        UserMapEditor editor = new UserMapEditor();        editor.setAsText("marissa=koala,ROLE_ONE,ROLE_TWO,enabled\r\n");        dao.setUserMap((UserMap) editor.getValue());        DaoAuthenticationProvider provider = new DaoAuthenticationProvider();        provider.setUserDetailsService(dao);        ProviderManager manager = new ProviderManager();        manager.setProviders(Arrays.asList(new Object[] {provider}));        manager.setApplicationEventPublisher(new MockApplicationEventPublisher());        manager.afterPropertiesSet();        filter = new BasicProcessingFilter();        filter.setAuthenticationManager(manager);        filter.setAuthenticationEntryPoint(new BasicProcessingFilterEntryPoint());    }    protected void tearDown() throws Exception {        super.tearDown();        SecurityContextHolder.clearContext();    }    public void testDoFilterWithNonHttpServletRequestDetected()        throws Exception {        BasicProcessingFilter filter = new BasicProcessingFilter();        try {            filter.doFilter(null, new MockHttpServletResponse(), new MockFilterChain());            fail("Should have thrown ServletException");        } catch (ServletException expected) {            assertEquals("Can only process HttpServletRequest", expected.getMessage());        }    }    public void testDoFilterWithNonHttpServletResponseDetected()        throws Exception {        BasicProcessingFilter filter = new BasicProcessingFilter();        try {            filter.doFilter(new MockHttpServletRequest(null, null), null, new MockFilterChain());            fail("Should have thrown ServletException");        } catch (ServletException expected) {            assertEquals("Can only process HttpServletResponse", expected.getMessage());        }    }    public void testFilterIgnoresRequestsContainingNoAuthorizationHeader()        throws Exception {        // Setup our HTTP request        MockHttpServletRequest request = new MockHttpServletRequest();        request.setServletPath("/some_file.html");        // Test        executeFilterInContainerSimulator(filter, request, true);        assertNull(SecurityContextHolder.getContext().getAuthentication());    }    public void testGettersSetters() {        BasicProcessingFilter filter = new BasicProcessingFilter();        filter.setAuthenticationManager(new MockAuthenticationManager());        assertTrue(filter.getAuthenticationManager() != null);        filter.setAuthenticationEntryPoint(new MockAuthenticationEntryPoint("sx"));        assertTrue(filter.getAuthenticationEntryPoint() != null);    }    public void testInvalidBasicAuthorizationTokenIsIgnored()        throws Exception {        // Setup our HTTP request        String token = "NOT_A_VALID_TOKEN_AS_MISSING_COLON";        MockHttpServletRequest request = new MockHttpServletRequest();        request.addHeader("Authorization", "Basic " + new String(Base64.encodeBase64(token.getBytes())));        request.setServletPath("/some_file.html");        request.setSession(new MockHttpSession());        // The filter chain shouldn't proceed        executeFilterInContainerSimulator(filter, request, false);        assertNull(SecurityContextHolder.getContext().getAuthentication());    }    public void testNormalOperation() throws Exception {        // Setup our HTTP request        String token = "marissa:koala";        MockHttpServletRequest request = new MockHttpServletRequest();        request.addHeader("Authorization", "Basic " + new String(Base64.encodeBase64(token.getBytes())));        request.setServletPath("/some_file.html");        request.setSession(new MockHttpSession());        // Test        assertNull(SecurityContextHolder.getContext().getAuthentication());        executeFilterInContainerSimulator(filter, request, true);        assertNotNull(SecurityContextHolder.getContext().getAuthentication());        assertEquals("marissa",            ((UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getUsername());    }    public void testOtherAuthorizationSchemeIsIgnored()        throws Exception {        // Setup our HTTP request        MockHttpServletRequest request = new MockHttpServletRequest();        request.addHeader("Authorization", "SOME_OTHER_AUTHENTICATION_SCHEME");        request.setServletPath("/some_file.html");        // Test        executeFilterInContainerSimulator(filter, request, true);        assertNull(SecurityContextHolder.getContext().getAuthentication());    }    public void testStartupDetectsMissingAuthenticationEntryPoint()        throws Exception {        try {            BasicProcessingFilter filter = new BasicProcessingFilter();            filter.setAuthenticationManager(new MockAuthenticationManager());            filter.afterPropertiesSet();            fail("Should have thrown IllegalArgumentException");        } catch (IllegalArgumentException expected) {            assertEquals("An AuthenticationEntryPoint is required", expected.getMessage());        }    }    public void testStartupDetectsMissingAuthenticationManager()        throws Exception {        try {            BasicProcessingFilter filter = new BasicProcessingFilter();            filter.setAuthenticationEntryPoint(new MockAuthenticationEntryPoint("x"));            filter.afterPropertiesSet();            fail("Should have thrown IllegalArgumentException");        } catch (IllegalArgumentException expected) {            assertEquals("An AuthenticationManager is required", expected.getMessage());        }    }    public void testSuccessLoginThenFailureLoginResultsInSessionLoosingToken()        throws Exception {        // Setup our HTTP request        String token = "marissa:koala";        MockHttpServletRequest request = new MockHttpServletRequest();        request.addHeader("Authorization", "Basic " + new String(Base64.encodeBase64(token.getBytes())));        request.setServletPath("/some_file.html");        request.setSession(new MockHttpSession());        // Test        executeFilterInContainerSimulator(filter, request, true);        assertNotNull(SecurityContextHolder.getContext().getAuthentication());        assertEquals("marissa",            ((UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getUsername());        // NOW PERFORM FAILED AUTHENTICATION        // Setup our HTTP request        token = "otherUser:WRONG_PASSWORD";        request = new MockHttpServletRequest();        request.addHeader("Authorization", "Basic " + new String(Base64.encodeBase64(token.getBytes())));        request.setServletPath("/some_file.html");        request.setSession(new MockHttpSession());        // Test - the filter chain will not be invoked, as we get a 403 forbidden response        MockHttpServletResponse response = executeFilterInContainerSimulator(filter, request, false);        assertNull(SecurityContextHolder.getContext().getAuthentication());        assertEquals(401, response.getStatus());    }    public void testWrongPasswordContinuesFilterChainIfIgnoreFailureIsTrue()        throws Exception {        // Setup our HTTP request        String token = "marissa:WRONG_PASSWORD";        MockHttpServletRequest request = new MockHttpServletRequest();        request.addHeader("Authorization", "Basic " + new String(Base64.encodeBase64(token.getBytes())));        request.setServletPath("/some_file.html");        request.setSession(new MockHttpSession());        filter.setIgnoreFailure(true);        assertTrue(filter.isIgnoreFailure());        // Test - the filter chain will be invoked, as we've set ignoreFailure = true        MockHttpServletResponse response = executeFilterInContainerSimulator(filter, request, true);        assertNull(SecurityContextHolder.getContext().getAuthentication());    }    public void testWrongPasswordReturnsForbiddenIfIgnoreFailureIsFalse()        throws Exception {        // Setup our HTTP request        String token = "marissa:WRONG_PASSWORD";        MockHttpServletRequest request = new MockHttpServletRequest();        request.addHeader("Authorization", "Basic " + new String(Base64.encodeBase64(token.getBytes())));        request.setServletPath("/some_file.html");        request.setSession(new MockHttpSession());        assertFalse(filter.isIgnoreFailure());        // Test - the filter chain will not be invoked, as we get a 403 forbidden response        MockHttpServletResponse response = executeFilterInContainerSimulator(filter, request, false);        assertNull(SecurityContextHolder.getContext().getAuthentication());        assertEquals(401, response.getStatus());    }    //~ Inner Classes ==================================================================================================    private class MockApplicationEventPublisher implements ApplicationEventPublisher {        public MockApplicationEventPublisher() {}        public void publishEvent(ApplicationEvent event) {}    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -