|
@@ -19,24 +19,23 @@ package org.springframework.security.web.util;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
|
|
|
import org.springframework.expression.EvaluationContext;
|
|
import org.springframework.expression.EvaluationContext;
|
|
|
|
+import org.springframework.expression.EvaluationException;
|
|
import org.springframework.expression.Expression;
|
|
import org.springframework.expression.Expression;
|
|
import org.springframework.expression.spel.standard.SpelExpressionParser;
|
|
import org.springframework.expression.spel.standard.SpelExpressionParser;
|
|
import org.springframework.expression.spel.support.StandardEvaluationContext;
|
|
import org.springframework.expression.spel.support.StandardEvaluationContext;
|
|
-import org.springframework.security.access.expression.ExpressionUtils;
|
|
|
|
import org.springframework.security.web.authentication.DelegatingAuthenticationEntryPoint;
|
|
import org.springframework.security.web.authentication.DelegatingAuthenticationEntryPoint;
|
|
|
|
|
|
/**
|
|
/**
|
|
* A RequestMatcher implementation which uses a SpEL expression
|
|
* 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>
|
|
* <p>See {@link DelegatingAuthenticationEntryPoint} for a example configuration.</p>
|
|
- *
|
|
|
|
- *
|
|
|
|
|
|
+ *
|
|
|
|
+ *
|
|
* @author Mike Wiesner
|
|
* @author Mike Wiesner
|
|
* @since 3.0.2
|
|
* @since 3.0.2
|
|
- * @version $Id:$
|
|
|
|
*/
|
|
*/
|
|
public class ELRequestMatcher implements RequestMatcher {
|
|
public class ELRequestMatcher implements RequestMatcher {
|
|
|
|
|
|
@@ -49,16 +48,23 @@ public class ELRequestMatcher implements RequestMatcher {
|
|
|
|
|
|
public boolean matches(HttpServletRequest request) {
|
|
public boolean matches(HttpServletRequest request) {
|
|
EvaluationContext context = createELContext(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
|
|
* 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
|
|
* @return EL root context which is used to evaluate the expression
|
|
*/
|
|
*/
|
|
public EvaluationContext createELContext(HttpServletRequest request) {
|
|
public EvaluationContext createELContext(HttpServletRequest request) {
|
|
return new StandardEvaluationContext(new ELRequestMatcherContext(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);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|