SEC-1887: Add MethodSecurityOperations interface.
This should cater for implementations which want to use the full filtering capabilities while creating a custom expression root object. Also cleaning whitespace.
This commit is contained in:
parent
2434564d6c
commit
5d71d2a4fa
|
@ -70,9 +70,9 @@ public abstract class AbstractSecurityExpressionHandler<T> implements SecurityEx
|
|||
protected abstract SecurityExpressionOperations createSecurityExpressionRoot(Authentication authentication, T invocation);
|
||||
|
||||
protected RoleHierarchy getRoleHierarchy() {
|
||||
return roleHierarchy;
|
||||
}
|
||||
|
||||
return roleHierarchy;
|
||||
}
|
||||
|
||||
public void setRoleHierarchy(RoleHierarchy roleHierarchy) {
|
||||
this.roleHierarchy = roleHierarchy;
|
||||
}
|
||||
|
|
|
@ -1,30 +1,41 @@
|
|||
package org.springframework.security.access.expression;
|
||||
|
||||
import org.springframework.security.core.Authentication;
|
||||
|
||||
/**
|
||||
* Standard interface for expression root objects used with expression-based
|
||||
* security.
|
||||
*
|
||||
* @author Andrei Stefan
|
||||
* @author Luke Taylor
|
||||
* @since 3.1.1
|
||||
*/
|
||||
public interface SecurityExpressionOperations {
|
||||
|
||||
public abstract boolean hasAuthority(String authority);
|
||||
Authentication getAuthentication();
|
||||
|
||||
public abstract boolean hasAnyAuthority(String... authorities);
|
||||
boolean hasAuthority(String authority);
|
||||
|
||||
public abstract boolean hasRole(String role);
|
||||
boolean hasAnyAuthority(String... authorities);
|
||||
|
||||
public abstract boolean hasAnyRole(String... roles);
|
||||
boolean hasRole(String role);
|
||||
|
||||
public abstract boolean permitAll();
|
||||
boolean hasAnyRole(String... roles);
|
||||
|
||||
public abstract boolean denyAll();
|
||||
boolean permitAll();
|
||||
|
||||
public abstract boolean isAnonymous();
|
||||
boolean denyAll();
|
||||
|
||||
public abstract boolean isAuthenticated();
|
||||
boolean isAnonymous();
|
||||
|
||||
public abstract boolean isRememberMe();
|
||||
boolean isAuthenticated();
|
||||
|
||||
public abstract boolean isFullyAuthenticated();
|
||||
boolean isRememberMe();
|
||||
|
||||
public abstract boolean hasPermission(Object target, Object permission);
|
||||
boolean isFullyAuthenticated();
|
||||
|
||||
public abstract boolean hasPermission(Object targetId, String targetType,
|
||||
Object permission);
|
||||
boolean hasPermission(Object target, Object permission);
|
||||
|
||||
}
|
||||
boolean hasPermission(Object targetId, String targetType, Object permission);
|
||||
|
||||
}
|
||||
|
|
|
@ -45,35 +45,19 @@ public abstract class SecurityExpressionRoot implements SecurityExpressionOperat
|
|||
this.authentication = a;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.security.access.expression.SecurityExpressionOperations#hasAuthority(java.lang.String)
|
||||
*/
|
||||
@Override
|
||||
public final boolean hasAuthority(String authority) {
|
||||
public final boolean hasAuthority(String authority) {
|
||||
return hasRole(authority);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.security.access.expression.SecurityExpressionOperations#hasAnyAuthority(java.lang.String)
|
||||
*/
|
||||
@Override
|
||||
public final boolean hasAnyAuthority(String... authorities) {
|
||||
public final boolean hasAnyAuthority(String... authorities) {
|
||||
return hasAnyRole(authorities);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.security.access.expression.SecurityExpressionOperations#hasRole(java.lang.String)
|
||||
*/
|
||||
@Override
|
||||
public final boolean hasRole(String role) {
|
||||
public final boolean hasRole(String role) {
|
||||
return getAuthoritySet().contains(role);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.security.access.expression.SecurityExpressionOperations#hasAnyRole(java.lang.String)
|
||||
*/
|
||||
@Override
|
||||
public final boolean hasAnyRole(String... roles) {
|
||||
public final boolean hasAnyRole(String... roles) {
|
||||
Set<String> roleSet = getAuthoritySet();
|
||||
|
||||
for (String role : roles) {
|
||||
|
@ -89,51 +73,27 @@ public abstract class SecurityExpressionRoot implements SecurityExpressionOperat
|
|||
return authentication;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.security.access.expression.SecurityExpressionOperations#permitAll()
|
||||
*/
|
||||
@Override
|
||||
public final boolean permitAll() {
|
||||
public final boolean permitAll() {
|
||||
return true;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.security.access.expression.SecurityExpressionOperations#denyAll()
|
||||
*/
|
||||
@Override
|
||||
public final boolean denyAll() {
|
||||
public final boolean denyAll() {
|
||||
return false;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.security.access.expression.SecurityExpressionOperations#isAnonymous()
|
||||
*/
|
||||
@Override
|
||||
public final boolean isAnonymous() {
|
||||
public final boolean isAnonymous() {
|
||||
return trustResolver.isAnonymous(authentication);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.security.access.expression.SecurityExpressionOperations#isAuthenticated()
|
||||
*/
|
||||
@Override
|
||||
public final boolean isAuthenticated() {
|
||||
public final boolean isAuthenticated() {
|
||||
return !isAnonymous();
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.security.access.expression.SecurityExpressionOperations#isRememberMe()
|
||||
*/
|
||||
@Override
|
||||
public final boolean isRememberMe() {
|
||||
public final boolean isRememberMe() {
|
||||
return trustResolver.isRememberMe(authentication);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.security.access.expression.SecurityExpressionOperations#isFullyAuthenticated()
|
||||
*/
|
||||
@Override
|
||||
public final boolean isFullyAuthenticated() {
|
||||
public final boolean isFullyAuthenticated() {
|
||||
return !trustResolver.isAnonymous(authentication) && !trustResolver.isRememberMe(authentication);
|
||||
}
|
||||
|
||||
|
@ -164,19 +124,12 @@ public abstract class SecurityExpressionRoot implements SecurityExpressionOperat
|
|||
return roles;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.security.access.expression.SecurityExpressionOperations#hasPermission(java.lang.Object, java.lang.Object)
|
||||
*/
|
||||
@Override
|
||||
public boolean hasPermission(Object target, Object permission) {
|
||||
|
||||
public boolean hasPermission(Object target, Object permission) {
|
||||
return permissionEvaluator.hasPermission(authentication, target, permission);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.security.access.expression.SecurityExpressionOperations#hasPermission(java.lang.Object, java.lang.String, java.lang.Object)
|
||||
*/
|
||||
@Override
|
||||
public boolean hasPermission(Object targetId, String targetType, Object permission) {
|
||||
public boolean hasPermission(Object targetId, String targetType, Object permission) {
|
||||
return permissionEvaluator.hasPermission(authentication, (Serializable)targetId, targetType, permission);
|
||||
}
|
||||
|
||||
|
|
|
@ -48,8 +48,10 @@ public class DefaultMethodSecurityExpressionHandler extends AbstractSecurityExpr
|
|||
return new MethodSecurityEvaluationContext(auth, mi, parameterNameDiscoverer);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SecurityExpressionOperations createSecurityExpressionRoot(Authentication authentication, MethodInvocation invocation) {
|
||||
/**
|
||||
* Creates the root object for expression evaluation.
|
||||
*/
|
||||
protected MethodSecurityExpressionOperations createSecurityExpressionRoot(Authentication authentication, MethodInvocation invocation) {
|
||||
MethodSecurityExpressionRoot root = new MethodSecurityExpressionRoot(authentication);
|
||||
root.setThis(invocation.getThis());
|
||||
root.setPermissionEvaluator(getPermissionEvaluator());
|
||||
|
@ -68,7 +70,7 @@ public class DefaultMethodSecurityExpressionHandler extends AbstractSecurityExpr
|
|||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public Object filter(Object filterTarget, Expression filterExpression, EvaluationContext ctx) {
|
||||
MethodSecurityExpressionRoot rootObject = (MethodSecurityExpressionRoot) ctx.getRootObject().getValue();
|
||||
MethodSecurityExpressionOperations rootObject = (MethodSecurityExpressionOperations) ctx.getRootObject().getValue();
|
||||
final boolean debug = logger.isDebugEnabled();
|
||||
List retainList;
|
||||
|
||||
|
|
|
@ -0,0 +1,34 @@
|
|||
/*
|
||||
* Copyright 2006-2011 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
|
||||
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations under the License.
|
||||
*/
|
||||
package org.springframework.security.access.expression.method;
|
||||
|
||||
import org.springframework.security.access.expression.SecurityExpressionOperations;
|
||||
|
||||
/**
|
||||
* Interface which must be implemented if you want to use filtering in method security
|
||||
* expressions.
|
||||
*
|
||||
* @author Luke Taylor
|
||||
* @since 3.1.1
|
||||
*/
|
||||
public interface MethodSecurityExpressionOperations extends SecurityExpressionOperations {
|
||||
void setFilterObject(Object filterObject);
|
||||
|
||||
Object getFilterObject();
|
||||
|
||||
void setReturnObject(Object returnObject);
|
||||
|
||||
Object getReturnObject();
|
||||
|
||||
Object getThis();
|
||||
}
|
|
@ -10,7 +10,7 @@ import org.springframework.security.core.Authentication;
|
|||
* @author Luke Taylor
|
||||
* @since 3.0
|
||||
*/
|
||||
class MethodSecurityExpressionRoot extends SecurityExpressionRoot {
|
||||
class MethodSecurityExpressionRoot extends SecurityExpressionRoot implements MethodSecurityExpressionOperations {
|
||||
private Object filterObject;
|
||||
private Object returnObject;
|
||||
private Object target;
|
||||
|
|
|
@ -13,8 +13,8 @@ import org.springframework.security.web.FilterInvocation;
|
|||
* @since 3.0
|
||||
*/
|
||||
public class DefaultWebSecurityExpressionHandler extends AbstractSecurityExpressionHandler<FilterInvocation> {
|
||||
|
||||
private final AuthenticationTrustResolver trustResolver = new AuthenticationTrustResolverImpl();
|
||||
|
||||
private final AuthenticationTrustResolver trustResolver = new AuthenticationTrustResolverImpl();
|
||||
|
||||
@Override
|
||||
protected SecurityExpressionOperations createSecurityExpressionRoot(Authentication authentication, FilterInvocation fi) {
|
||||
|
|
Loading…
Reference in New Issue