SEC-468: Added Mike Wiesner's patch for AspectJ annotation support.

This commit is contained in:
Luke Taylor 2008-01-29 11:33:38 +00:00
parent ef428d2c22
commit 95c6ecdb1e
2 changed files with 77 additions and 0 deletions

View File

@ -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();
}

View File

@ -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;
}
}