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

📄 filtersecurityinterceptortests.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.intercept.web;import junit.framework.TestCase;import org.acegisecurity.AccessDecisionManager;import org.acegisecurity.AccessDeniedException;import org.acegisecurity.Authentication;import org.acegisecurity.ConfigAttribute;import org.acegisecurity.ConfigAttributeDefinition;import org.acegisecurity.GrantedAuthority;import org.acegisecurity.GrantedAuthorityImpl;import org.acegisecurity.MockAccessDecisionManager;import org.acegisecurity.MockApplicationContext;import org.acegisecurity.MockAuthenticationManager;import org.acegisecurity.MockRunAsManager;import org.acegisecurity.RunAsManager;import org.acegisecurity.SecurityConfig;import org.acegisecurity.context.SecurityContextHolder;import org.acegisecurity.providers.UsernamePasswordAuthenticationToken;import org.springframework.mock.web.MockHttpServletRequest;import org.springframework.mock.web.MockHttpServletResponse;import java.io.IOException;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import javax.servlet.FilterChain;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;/** * Tests {@link FilterSecurityInterceptor}. * * @author Ben Alex * @version $Id: FilterSecurityInterceptorTests.java 1570 2006-07-06 17:05:08Z carlossg $ */public class FilterSecurityInterceptorTests extends TestCase {    //~ Constructors ===================================================================================================    public FilterSecurityInterceptorTests() {        super();    }    public FilterSecurityInterceptorTests(String arg0) {        super(arg0);    }    //~ Methods ========================================================================================================    public static void main(String[] args) {        junit.textui.TestRunner.run(FilterSecurityInterceptorTests.class);    }    public final void setUp() throws Exception {        super.setUp();    }    public void testEnsuresAccessDecisionManagerSupportsFilterInvocationClass()        throws Exception {        FilterSecurityInterceptor interceptor = new FilterSecurityInterceptor();        interceptor.setAuthenticationManager(new MockAuthenticationManager());        interceptor.setObjectDefinitionSource(new RegExpBasedFilterInvocationDefinitionMap());        interceptor.setRunAsManager(new MockRunAsManager());        interceptor.setAccessDecisionManager(new AccessDecisionManager() {                public boolean supports(Class clazz) {                    return false;                }                public boolean supports(ConfigAttribute attribute) {                    return true;                }                public void decide(Authentication authentication, Object object, ConfigAttributeDefinition config)                    throws AccessDeniedException {                    throw new UnsupportedOperationException("mock method not implemented");                }            });        try {            interceptor.afterPropertiesSet();            fail("Should have thrown IllegalArgumentException");        } catch (IllegalArgumentException expected) {            assertEquals("AccessDecisionManager does not support secure object class: class org.acegisecurity.intercept.web.FilterInvocation",                expected.getMessage());        }    }    public void testEnsuresRunAsManagerSupportsFilterInvocationClass()        throws Exception {        FilterSecurityInterceptor interceptor = new FilterSecurityInterceptor();        interceptor.setAccessDecisionManager(new MockAccessDecisionManager());        interceptor.setAuthenticationManager(new MockAuthenticationManager());        interceptor.setObjectDefinitionSource(new RegExpBasedFilterInvocationDefinitionMap());        interceptor.setRunAsManager(new RunAsManager() {                public boolean supports(Class clazz) {                    return false;                }                public boolean supports(ConfigAttribute attribute) {                    return true;                }                public Authentication buildRunAs(Authentication authentication, Object object,                    ConfigAttributeDefinition config) {                    throw new UnsupportedOperationException("mock method not implemented");                }            });        try {            interceptor.afterPropertiesSet();            fail("Should have thrown IllegalArgumentException");        } catch (IllegalArgumentException expected) {            assertEquals("RunAsManager does not support secure object class: class org.acegisecurity.intercept.web.FilterInvocation",                expected.getMessage());        }    }    public void testHttpsInvocationReflectsPortNumber()        throws Throwable {        // Setup the FilterSecurityInterceptor        FilterSecurityInterceptor interceptor = new FilterSecurityInterceptor();        interceptor.setAccessDecisionManager(new MockAccessDecisionManager());        interceptor.setAuthenticationManager(new MockAuthenticationManager());        interceptor.setRunAsManager(new MockRunAsManager());        interceptor.setApplicationEventPublisher(MockApplicationContext.getContext());        // Setup a mock config attribute definition        ConfigAttributeDefinition def = new ConfigAttributeDefinition();        def.addConfigAttribute(new SecurityConfig("MOCK_OK"));        MockFilterInvocationDefinitionMap mockSource = new MockFilterInvocationDefinitionMap("/secure/page.html", def);        interceptor.setObjectDefinitionSource(mockSource);        // Setup our expectation that the filter chain will be invoked, as access is granted        MockFilterChain chain = new MockFilterChain(true);        // Setup our HTTPS request and response        MockHttpServletResponse response = new MockHttpServletResponse();        MockHttpServletRequest request = new MockHttpServletRequest();        request.setServletPath("/secure/page.html");        request.setScheme("https");        request.setServerPort(443);        // Setup a Context        UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken("Test", "Password",                new GrantedAuthority[] {new GrantedAuthorityImpl("MOCK_OK")});        SecurityContextHolder.getContext().setAuthentication(token);        // Create and test our secure object        FilterInvocation fi = new FilterInvocation(request, response, chain);        interceptor.invoke(fi);        // Destroy the Context        SecurityContextHolder.clearContext();    }    public void testNormalStartupAndGetter() throws Exception {        FilterSecurityInterceptor interceptor = new FilterSecurityInterceptor();        interceptor.setAccessDecisionManager(new MockAccessDecisionManager());        interceptor.setAuthenticationManager(new MockAuthenticationManager());        RegExpBasedFilterInvocationDefinitionMap fidp = new RegExpBasedFilterInvocationDefinitionMap();        interceptor.setObjectDefinitionSource(fidp);        interceptor.setRunAsManager(new MockRunAsManager());        interceptor.afterPropertiesSet();        assertTrue(true);        assertEquals(fidp, interceptor.getObjectDefinitionSource());    }    /**     * We just test invocation works in a success event. There is no need to test  access denied events as the     * abstract parent enforces that logic, which is extensively tested separately.     *     * @throws Throwable DOCUMENT ME!     */    public void testSuccessfulInvocation() throws Throwable {        // Setup the FilterSecurityInterceptor        FilterSecurityInterceptor interceptor = new FilterSecurityInterceptor();        interceptor.setAccessDecisionManager(new MockAccessDecisionManager());        interceptor.setAuthenticationManager(new MockAuthenticationManager());        interceptor.setRunAsManager(new MockRunAsManager());        interceptor.setApplicationEventPublisher(MockApplicationContext.getContext());        // Setup a mock config attribute definition        ConfigAttributeDefinition def = new ConfigAttributeDefinition();        def.addConfigAttribute(new SecurityConfig("MOCK_OK"));        MockFilterInvocationDefinitionMap mockSource = new MockFilterInvocationDefinitionMap("/secure/page.html", def);        interceptor.setObjectDefinitionSource(mockSource);        // Setup our expectation that the filter chain will be invoked, as access is granted        MockFilterChain chain = new MockFilterChain(true);        // Setup our HTTP request and response        MockHttpServletResponse response = new MockHttpServletResponse();        MockHttpServletRequest request = new MockHttpServletRequest();        request.setServletPath("/secure/page.html");        // Setup a Context        UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken("Test", "Password",                new GrantedAuthority[] {new GrantedAuthorityImpl("MOCK_OK")});        SecurityContextHolder.getContext().setAuthentication(token);        // Create and test our secure object        FilterInvocation fi = new FilterInvocation(request, response, chain);        interceptor.invoke(fi);        // Destroy the Context        SecurityContextHolder.clearContext();    }    public void testNotLoadedFromApplicationContext() throws Exception {        FilterInvocationDefinitionSourceMapping mapping = new FilterInvocationDefinitionSourceMapping();        mapping.setUrl("/secure/**");        mapping.addConfigAttribute("ROLE_USER");        List mappings = new ArrayList(1);        mappings.add(mapping);        PathBasedFilterInvocationDefinitionMap filterInvocationDefinitionSource = new PathBasedFilterInvocationDefinitionMap();        filterInvocationDefinitionSource                .setConvertUrlToLowercaseBeforeComparison(true);        FilterInvocationDefinitionDecorator decorator = new FilterInvocationDefinitionDecorator(                filterInvocationDefinitionSource);        decorator.setMappings(mappings);        FilterSecurityInterceptor filter = new FilterSecurityInterceptor();        filter.setObjectDefinitionSource(filterInvocationDefinitionSource);        MockFilterChain filterChain = new MockFilterChain();        filterChain.expectToProceed = true;        FilterInvocation fi = new FilterInvocation(                new MockHttpServletRequest(), new MockHttpServletResponse(),                filterChain);        filter.invoke(fi);    }    //~ Inner Classes ==================================================================================================    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");            }        }    }    private class MockFilterInvocationDefinitionMap implements FilterInvocationDefinitionSource {        private ConfigAttributeDefinition toReturn;        private String servletPath;        public MockFilterInvocationDefinitionMap(String servletPath, ConfigAttributeDefinition toReturn) {            this.servletPath = servletPath;            this.toReturn = toReturn;        }        private MockFilterInvocationDefinitionMap() {            super();        }        public ConfigAttributeDefinition getAttributes(Object object)            throws IllegalArgumentException {            FilterInvocation fi = (FilterInvocation) object;            if (servletPath.equals(fi.getHttpRequest().getServletPath())) {                return toReturn;            } else {                return null;            }        }        public Iterator getConfigAttributeDefinitions() {            return null;        }        public boolean supports(Class clazz) {            return true;        }    }}

⌨️ 快捷键说明

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