SEC-468: Added Mike Wiesner's patch for AspectJ annotation support.
This commit is contained in:
parent
ef428d2c22
commit
95c6ecdb1e
|
@ -0,0 +1,16 @@
|
||||||
|
package org.springframework.security.intercept.method.aspectj;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called by the {@link AspectJAnnotationSecurityInterceptor} when it wishes for the
|
||||||
|
* AspectJ processing to continue.
|
||||||
|
*
|
||||||
|
* @author Mike Wiesner
|
||||||
|
* @version $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
public interface AspectJAnnotationCallback {
|
||||||
|
//~ Methods ========================================================================================================
|
||||||
|
|
||||||
|
Object proceedWithObject();
|
||||||
|
}
|
|
@ -0,0 +1,61 @@
|
||||||
|
package org.springframework.security.intercept.method.aspectj;
|
||||||
|
|
||||||
|
import org.springframework.security.intercept.AbstractSecurityInterceptor;
|
||||||
|
import org.springframework.security.intercept.InterceptorStatusToken;
|
||||||
|
import org.springframework.security.intercept.ObjectDefinitionSource;
|
||||||
|
import org.springframework.security.intercept.method.MethodDefinitionSource;
|
||||||
|
|
||||||
|
import org.aspectj.lang.JoinPoint;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AspectJ interceptor that supports @Aspect notation.
|
||||||
|
*
|
||||||
|
* @author Mike Wiesner
|
||||||
|
* @version $Id$
|
||||||
|
*/
|
||||||
|
public class AspectJAnnotationSecurityInterceptor extends AbstractSecurityInterceptor {
|
||||||
|
//~ Instance fields ================================================================================================
|
||||||
|
|
||||||
|
private MethodDefinitionSource objectDefinitionSource;
|
||||||
|
|
||||||
|
//~ Methods ========================================================================================================
|
||||||
|
|
||||||
|
public MethodDefinitionSource getObjectDefinitionSource() {
|
||||||
|
return this.objectDefinitionSource;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Class getSecureObjectClass() {
|
||||||
|
return JoinPoint.class;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method should be used to enforce security on a <code>JoinPoint</code>.
|
||||||
|
*
|
||||||
|
* @param jp The AspectJ joint point being invoked which requires a security decision
|
||||||
|
* @param advisorProceed the advice-defined anonymous class that implements <code>AspectJCallback</code> containing
|
||||||
|
* a simple <code>return proceed();</code> statement
|
||||||
|
*
|
||||||
|
* @return The returned value from the method invocation
|
||||||
|
*/
|
||||||
|
public Object invoke(JoinPoint jp, AspectJAnnotationCallback advisorProceed) throws Throwable {
|
||||||
|
Object result = null;
|
||||||
|
InterceptorStatusToken token = super.beforeInvocation(jp);
|
||||||
|
|
||||||
|
try {
|
||||||
|
result = advisorProceed.proceedWithObject();
|
||||||
|
} finally {
|
||||||
|
result = super.afterInvocation(token, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ObjectDefinitionSource obtainObjectDefinitionSource() {
|
||||||
|
return this.objectDefinitionSource;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setObjectDefinitionSource(MethodDefinitionSource newSource) {
|
||||||
|
this.objectDefinitionSource = newSource;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue