diff --git a/web/src/main/java/org/springframework/security/web/util/ELRequestMatcher.java b/web/src/main/java/org/springframework/security/web/util/ELRequestMatcher.java index 4ab9b61758..9a2f751e99 100644 --- a/web/src/main/java/org/springframework/security/web/util/ELRequestMatcher.java +++ b/web/src/main/java/org/springframework/security/web/util/ELRequestMatcher.java @@ -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 - * - *

With the default EvalutationContext ({@link ELRequestMatcherContext}) you can use - * hasIpAdress() and hasHeader()

- * + * + *

With the default EvalutationContext ({@link ELRequestMatcherContext}) you can use + * hasIpAdress() and hasHeader()

+ * *

See {@link DelegatingAuthenticationEntryPoint} for a example configuration.

- * - * + * + * * @author Mike Wiesner * @since 3.0.2 - * @version $Id:$ */ 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); + } + } } diff --git a/web/src/main/java/org/springframework/security/web/util/ELRequestMatcherContext.java b/web/src/main/java/org/springframework/security/web/util/ELRequestMatcherContext.java index 8c2e6fa8ff..b675e30f5f 100644 --- a/web/src/main/java/org/springframework/security/web/util/ELRequestMatcherContext.java +++ b/web/src/main/java/org/springframework/security/web/util/ELRequestMatcherContext.java @@ -28,23 +28,21 @@ class ELRequestMatcherContext { this.request = request; } - @SuppressWarnings("unused") public boolean hasIpAddress(String ipAddress) { return (new IpAddressMatcher(ipAddress).matches(request)); } - - @SuppressWarnings("unused") + public boolean hasHeader(String headerName, String value) { String header = request.getHeader(headerName); if (StringUtils.hasText(header) == false) { return false; } - + if (header.contains(value)) { return true; } - + return false; } -} \ No newline at end of file +}