001 package org.granite.messaging.service.security;
002
003 import org.springframework.security.intercept.AbstractSecurityInterceptor;
004 import org.springframework.security.intercept.InterceptorStatusToken;
005 import org.springframework.security.intercept.ObjectDefinitionSource;
006 import org.springframework.security.intercept.web.FilterInvocation;
007 import org.springframework.security.intercept.web.FilterInvocationDefinitionSource;
008
009
010 public abstract class AbstractSpringSecurityInterceptor extends AbstractSecurityInterceptor {
011
012 private FilterInvocationDefinitionSource objectDefinitionSource;
013
014 @Override
015 public Class<? extends Object> getSecureObjectClass() {
016 return FilterInvocation.class;
017 }
018
019 @Override
020 public ObjectDefinitionSource obtainObjectDefinitionSource() {
021 return objectDefinitionSource;
022 }
023
024 public void setObjectDefinitionSource(FilterInvocationDefinitionSource newSource) {
025 this.objectDefinitionSource = newSource;
026 }
027
028 public Object invoke(AbstractSecurityContext securityContext) throws Exception {
029 FilterInvocation fi = buildFilterInvocation(securityContext);
030 InterceptorStatusToken token = beforeInvocation(fi);
031 Object returnedObject = null;
032 try {
033 returnedObject = securityContext.invoke();
034 }
035 finally {
036 returnedObject = afterInvocation(token, returnedObject);
037 }
038 return returnedObject;
039 }
040
041 protected abstract FilterInvocation buildFilterInvocation(AbstractSecurityContext securityContext);
042
043 }