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