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}