|  | @@ -0,0 +1,104 @@
 | 
	
		
			
				|  |  | +/* 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.util;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +import org.acegisecurity.intercept.web.FilterInvocation;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +import org.springframework.mock.web.MockHttpServletRequest;
 | 
	
		
			
				|  |  | +import org.springframework.mock.web.MockHttpServletResponse;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +import org.springframework.util.Assert;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +import java.io.IOException;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +import javax.servlet.FilterChain;
 | 
	
		
			
				|  |  | +import javax.servlet.ServletException;
 | 
	
		
			
				|  |  | +import javax.servlet.ServletRequest;
 | 
	
		
			
				|  |  | +import javax.servlet.ServletResponse;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * Static utility methods for creating <code>FilterInvocation</code>s usable
 | 
	
		
			
				|  |  | + * within Acegi Security.
 | 
	
		
			
				|  |  | + * 
 | 
	
		
			
				|  |  | + * <p>
 | 
	
		
			
				|  |  | + * The generated <code>FilterInvocation</code> objects are not intended for use
 | 
	
		
			
				|  |  | + * with <code>AbstractSecurityInterceptor</code> subclasses. Instead they are
 | 
	
		
			
				|  |  | + * generally used by <code>WebInvocationPrivilegeEvaluator</code>.
 | 
	
		
			
				|  |  | + * </p>
 | 
	
		
			
				|  |  | + *
 | 
	
		
			
				|  |  | + * @author Ben Alex
 | 
	
		
			
				|  |  | + * @version $Id$
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +public class FilterInvocationUtils {
 | 
	
		
			
				|  |  | +    //~ Methods ================================================================
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * Creates a <code>FilterInvocation</code> for the specified
 | 
	
		
			
				|  |  | +     * <code>contextPath</code> and <code>Uri</code>. Note the normal
 | 
	
		
			
				|  |  | +     * subclasses of <code>AbstractFilterInvocationDefinitionSource</code>
 | 
	
		
			
				|  |  | +     * disregard the <code>contextPath</code> when evaluating which secure
 | 
	
		
			
				|  |  | +     * object metadata applies to a given <code>FilterInvocation</code>, so
 | 
	
		
			
				|  |  | +     * generally the <code>contextPath</code> is unimportant unless you are
 | 
	
		
			
				|  |  | +     * using a custom <code>FilterInvocationDefinitionSource</code>.
 | 
	
		
			
				|  |  | +     *
 | 
	
		
			
				|  |  | +     * @param contextPath the <code>contextPath</code> that will be contained
 | 
	
		
			
				|  |  | +     *        within the
 | 
	
		
			
				|  |  | +     *        <code>FilterInvocation</code><code>HttpServletRequest</code>
 | 
	
		
			
				|  |  | +     * @param uri the URI of the request, such as <code>/foo/default.jsp</code>
 | 
	
		
			
				|  |  | +     *
 | 
	
		
			
				|  |  | +     * @return a fully-formed <code>FilterInvocation</code> (never
 | 
	
		
			
				|  |  | +     *         <code>null</code>)
 | 
	
		
			
				|  |  | +     *
 | 
	
		
			
				|  |  | +     * @throws UnsupportedOperationException DOCUMENT ME!
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    public static FilterInvocation create(String contextPath, String uri) {
 | 
	
		
			
				|  |  | +        Assert.hasText(contextPath, "contextPath required");
 | 
	
		
			
				|  |  | +        Assert.hasText(uri, "URI required");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        MockHttpServletRequest req = new MockHttpServletRequest();
 | 
	
		
			
				|  |  | +        req.setRequestURI(contextPath + uri);
 | 
	
		
			
				|  |  | +        req.setContextPath(contextPath);
 | 
	
		
			
				|  |  | +        req.setServletPath(null);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        FilterInvocation fi = new FilterInvocation(req,
 | 
	
		
			
				|  |  | +                new MockHttpServletResponse(),
 | 
	
		
			
				|  |  | +                new FilterChain() {
 | 
	
		
			
				|  |  | +                    public void doFilter(ServletRequest arg0,
 | 
	
		
			
				|  |  | +                        ServletResponse arg1)
 | 
	
		
			
				|  |  | +                        throws IOException, ServletException {
 | 
	
		
			
				|  |  | +                        throw new UnsupportedOperationException(
 | 
	
		
			
				|  |  | +                            "WebInvocationPrivilegeEvaluator does not support filter chains");
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        return fi;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * Creates a <code>FilterInvocation</code> for the specified
 | 
	
		
			
				|  |  | +     * <code>Uri</code>. The <code>contextPath</code> is set to a default
 | 
	
		
			
				|  |  | +     * value.
 | 
	
		
			
				|  |  | +     *
 | 
	
		
			
				|  |  | +     * @param uri the URI of the request, such as <code>/foo/default.jsp</code>
 | 
	
		
			
				|  |  | +     *
 | 
	
		
			
				|  |  | +     * @return a fully-formed <code>FilterInvocation</code> (never
 | 
	
		
			
				|  |  | +     *         <code>null</code>)
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    public static FilterInvocation create(String uri) {
 | 
	
		
			
				|  |  | +        return create("/notused", uri);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +}
 |