|
@@ -9,6 +9,9 @@ import java.util.List;
|
|
|
import org.aopalliance.intercept.MethodInvocation;
|
|
|
import org.apache.commons.logging.Log;
|
|
|
import org.apache.commons.logging.LogFactory;
|
|
|
+import org.springframework.beans.BeansException;
|
|
|
+import org.springframework.context.ApplicationContext;
|
|
|
+import org.springframework.context.ApplicationContextAware;
|
|
|
import org.springframework.core.LocalVariableTableParameterNameDiscoverer;
|
|
|
import org.springframework.core.ParameterNameDiscoverer;
|
|
|
import org.springframework.expression.EvaluationContext;
|
|
@@ -18,6 +21,7 @@ import org.springframework.expression.spel.standard.SpelExpressionParser;
|
|
|
import org.springframework.security.access.PermissionCacheOptimizer;
|
|
|
import org.springframework.security.access.PermissionEvaluator;
|
|
|
import org.springframework.security.access.expression.ExpressionUtils;
|
|
|
+import org.springframework.security.access.expression.SecurityExpressionRootPropertyAccessor;
|
|
|
import org.springframework.security.access.hierarchicalroles.RoleHierarchy;
|
|
|
import org.springframework.security.authentication.AuthenticationTrustResolver;
|
|
|
import org.springframework.security.authentication.AuthenticationTrustResolverImpl;
|
|
@@ -31,7 +35,7 @@ import org.springframework.security.core.Authentication;
|
|
|
* @author Luke Taylor
|
|
|
* @since 3.0
|
|
|
*/
|
|
|
-public class DefaultMethodSecurityExpressionHandler implements MethodSecurityExpressionHandler {
|
|
|
+public class DefaultMethodSecurityExpressionHandler implements MethodSecurityExpressionHandler, ApplicationContextAware {
|
|
|
|
|
|
protected final Log logger = LogFactory.getLog(getClass());
|
|
|
|
|
@@ -39,8 +43,10 @@ public class DefaultMethodSecurityExpressionHandler implements MethodSecurityExp
|
|
|
private PermissionEvaluator permissionEvaluator = new DenyAllPermissionEvaluator();
|
|
|
private PermissionCacheOptimizer permissionCacheOptimizer = null;
|
|
|
private AuthenticationTrustResolver trustResolver = new AuthenticationTrustResolverImpl();
|
|
|
+ private final SecurityExpressionRootPropertyAccessor sxrpa = new SecurityExpressionRootPropertyAccessor();
|
|
|
private ExpressionParser expressionParser = new SpelExpressionParser();
|
|
|
private RoleHierarchy roleHierarchy;
|
|
|
+ private ApplicationContext applicationContext;
|
|
|
|
|
|
public DefaultMethodSecurityExpressionHandler() {
|
|
|
}
|
|
@@ -55,7 +61,9 @@ public class DefaultMethodSecurityExpressionHandler implements MethodSecurityExp
|
|
|
root.setTrustResolver(trustResolver);
|
|
|
root.setPermissionEvaluator(permissionEvaluator);
|
|
|
root.setRoleHierarchy(roleHierarchy);
|
|
|
+ root.setApplicationContext(applicationContext);
|
|
|
ctx.setRootObject(root);
|
|
|
+ ctx.addPropertyAccessor(sxrpa);
|
|
|
|
|
|
return ctx;
|
|
|
}
|
|
@@ -170,4 +178,8 @@ public class DefaultMethodSecurityExpressionHandler implements MethodSecurityExp
|
|
|
public void setRoleHierarchy(RoleHierarchy roleHierarchy) {
|
|
|
this.roleHierarchy = roleHierarchy;
|
|
|
}
|
|
|
+
|
|
|
+ public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
|
|
|
+ this.applicationContext = applicationContext;
|
|
|
+ }
|
|
|
}
|