SEC-1798: Remove internal evaluation of EL in JSP tag implementations.

This commit is contained in:
Luke Taylor 2011-08-12 19:42:53 +01:00
parent 45d938566c
commit 503ac9ae7c
6 changed files with 6 additions and 25 deletions

View File

@ -94,7 +94,7 @@ This content will only be visible to users who are authorized to send requests t
comma-separated list of required permissions for a specified domain object. If the comma-separated list of required permissions for a specified domain object. If the
current user has any of those permissions, then the tag body will be evaluated. If they current user has any of those permissions, then the tag body will be evaluated. If they
don't, it will be skipped. An example might don't, it will be skipped. An example might
be<programlisting language="xml">&lt;sec:accesscontrollist hasPermission="1,2" domainObject="someObject"> be<programlisting language="xml">&lt;sec:accesscontrollist hasPermission="1,2" domainObject="${someObject}">
This will be shown if the user has either of the permissions This will be shown if the user has either of the permissions
represented by the values "1" or "2" on the given object. represented by the values "1" or "2" on the given object.

View File

@ -306,6 +306,7 @@ public abstract class AbstractAuthorizeTag {
return target; return target;
} }
@SuppressWarnings("unchecked")
private SecurityExpressionHandler<FilterInvocation> getExpressionHandler() throws IOException { private SecurityExpressionHandler<FilterInvocation> getExpressionHandler() throws IOException {
ApplicationContext appContext = WebApplicationContextUtils ApplicationContext appContext = WebApplicationContextUtils
.getRequiredWebApplicationContext(getServletContext()); .getRequiredWebApplicationContext(getServletContext());

View File

@ -21,7 +21,6 @@ import org.springframework.security.access.PermissionEvaluator;
import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.taglibs.TagLibConfig; import org.springframework.security.taglibs.TagLibConfig;
import org.springframework.web.context.support.WebApplicationContextUtils; import org.springframework.web.context.support.WebApplicationContextUtils;
import org.springframework.web.util.ExpressionEvaluationUtils;
import javax.servlet.ServletContext; import javax.servlet.ServletContext;
import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspException;
@ -67,19 +66,7 @@ public class AccessControlListTag extends TagSupport {
initializeIfRequired(); initializeIfRequired();
final String evaledPermissionsString = ExpressionEvaluationUtils.evaluateString("hasPermission", hasPermission, if (domainObject == null) {
pageContext);
Object resolvedDomainObject;
if (domainObject instanceof String) {
resolvedDomainObject = ExpressionEvaluationUtils.evaluate("domainObject", (String) domainObject,
Object.class, pageContext);
} else {
resolvedDomainObject = domainObject;
}
if (resolvedDomainObject == null) {
if (logger.isDebugEnabled()) { if (logger.isDebugEnabled()) {
logger.debug("domainObject resolved to null, so including tag body"); logger.debug("domainObject resolved to null, so including tag body");
} }
@ -98,7 +85,7 @@ public class AccessControlListTag extends TagSupport {
} }
if (permissionEvaluator.hasPermission(SecurityContextHolder.getContext().getAuthentication(), if (permissionEvaluator.hasPermission(SecurityContextHolder.getContext().getAuthentication(),
resolvedDomainObject, evaledPermissionsString)) { domainObject, hasPermission)) {
return evalBody(); return evalBody();
} }

View File

@ -23,7 +23,6 @@ import org.springframework.security.web.util.TextEscapeUtils;
import org.springframework.beans.BeanWrapperImpl; import org.springframework.beans.BeanWrapperImpl;
import org.springframework.beans.BeansException; import org.springframework.beans.BeansException;
import org.springframework.web.util.ExpressionEvaluationUtils;
import org.springframework.web.util.TagUtils; import org.springframework.web.util.TagUtils;
import java.io.IOException; import java.io.IOException;
@ -144,7 +143,7 @@ public class AuthenticationTag extends TagSupport {
* Set HTML escaping for this tag, as boolean value. * Set HTML escaping for this tag, as boolean value.
*/ */
public void setHtmlEscape(String htmlEscape) throws JspException { public void setHtmlEscape(String htmlEscape) throws JspException {
this.htmlEscape = ExpressionEvaluationUtils.evaluateBoolean("htmlEscape", htmlEscape, pageContext); this.htmlEscape = Boolean.valueOf(htmlEscape);
} }
/** /**

View File

@ -23,7 +23,6 @@ import org.springframework.expression.TypedValue;
import org.springframework.security.access.expression.SecurityExpressionHandler; import org.springframework.security.access.expression.SecurityExpressionHandler;
import org.springframework.security.taglibs.TagLibConfig; import org.springframework.security.taglibs.TagLibConfig;
import org.springframework.security.web.FilterInvocation; import org.springframework.security.web.FilterInvocation;
import org.springframework.web.util.ExpressionEvaluationUtils;
/** /**
* A JSP {@link Tag} implementation of {@link AbstractAuthorizeTag}. * A JSP {@link Tag} implementation of {@link AbstractAuthorizeTag}.
@ -52,10 +51,6 @@ public class JspAuthorizeTag extends AbstractAuthorizeTag implements Tag {
*/ */
public int doStartTag() throws JspException { public int doStartTag() throws JspException {
try { try {
setIfNotGranted(ExpressionEvaluationUtils.evaluateString("ifNotGranted", getIfNotGranted(), pageContext));
setIfAllGranted(ExpressionEvaluationUtils.evaluateString("ifAllGranted", getIfAllGranted(), pageContext));
setIfAnyGranted(ExpressionEvaluationUtils.evaluateString("ifAnyGranted", getIfAnyGranted(), pageContext));
authorized = super.authorize(); authorized = super.authorize();
if (!authorized && TagLibConfig.isUiSecurityDisabled()) { if (!authorized && TagLibConfig.isUiSecurityDisabled()) {

View File

@ -164,8 +164,7 @@ public class AuthorizeTagTests {
@Test @Test
public void testOutputsBodyWhenNotGrantedSatisfied() throws JspException { public void testOutputsBodyWhenNotGrantedSatisfied() throws JspException {
authorizeTag.setIfNotGranted("ROLE_BANKER"); authorizeTag.setIfNotGranted("ROLE_BANKER");
assertEquals(Tag.EVAL_BODY_INCLUDE, assertEquals(Tag.EVAL_BODY_INCLUDE, authorizeTag.doStartTag());
authorizeTag.doStartTag());
} }
@Test @Test