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    }