001package org.granite.messaging.service.security;
002
003import org.springframework.security.intercept.AbstractSecurityInterceptor;
004import org.springframework.security.intercept.InterceptorStatusToken;
005import org.springframework.security.intercept.ObjectDefinitionSource;
006import org.springframework.security.intercept.web.FilterInvocation;
007import org.springframework.security.intercept.web.FilterInvocationDefinitionSource;
008
009
010public 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}