@ -19,24 +19,23 @@ package org.springframework.security.web.util;
@@ -19,24 +19,23 @@ package org.springframework.security.web.util;
import javax.servlet.http.HttpServletRequest ;
import org.springframework.expression.EvaluationContext ;
import org.springframework.expression.EvaluationException ;
import org.springframework.expression.Expression ;
import org.springframework.expression.spel.standard.SpelExpressionParser ;
import org.springframework.expression.spel.support.StandardEvaluationContext ;
import org.springframework.security.access.expression.ExpressionUtils ;
import org.springframework.security.web.authentication.DelegatingAuthenticationEntryPoint ;
/ * *
* A RequestMatcher implementation which uses a SpEL expression
*
* < p > With the default EvalutationContext ( { @link ELRequestMatcherContext } ) you can use
* < code > hasIpAdress ( ) < / code > and < code > hasHeader ( ) < / code > < / p >
*
*
* < p > With the default EvalutationContext ( { @link ELRequestMatcherContext } ) you can use
* < code > hasIpAdress ( ) < / code > and < code > hasHeader ( ) < / code > < / p >
*
* < p > See { @link DelegatingAuthenticationEntryPoint } for a example configuration . < / p >
*
*
*
*
* @author Mike Wiesner
* @since 3 . 0 . 2
* @version $Id : $
* /
public class ELRequestMatcher implements RequestMatcher {
@ -49,16 +48,23 @@ public class ELRequestMatcher implements RequestMatcher {
@@ -49,16 +48,23 @@ public class ELRequestMatcher implements RequestMatcher {
public boolean matches ( HttpServletRequest request ) {
EvaluationContext context = createELContext ( request ) ;
return ExpressionUtils . evaluateAsBoolean ( expression , context ) ;
return evaluateAsBoolean ( expression , context ) ;
}
/ * *
* Subclasses can override this methode if they want to use a different EL root context
*
*
* @return EL root context which is used to evaluate the expression
* /
public EvaluationContext createELContext ( HttpServletRequest request ) {
return new StandardEvaluationContext ( new ELRequestMatcherContext ( request ) ) ;
}
private boolean evaluateAsBoolean ( Expression expr , EvaluationContext ctx ) {
try {
return ( ( Boolean ) expr . getValue ( ctx , Boolean . class ) ) . booleanValue ( ) ;
} catch ( EvaluationException e ) {
throw new IllegalArgumentException ( "Failed to evaluate expression '" + expr . getExpressionString ( ) + "'" , e ) ;
}
}
}