なので、Struts2の Interceptor として実装した
package tutorial;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.acegisecurity.intercept.AbstractSecurityInterceptor;
import org.acegisecurity.intercept.InterceptorStatusToken;
import org.acegisecurity.intercept.ObjectDefinitionSource;
import org.acegisecurity.intercept.web.FilterInvocation;
import org.acegisecurity.intercept.web.FilterInvocationDefinitionSource;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
public class AcegiFilterSecurityInterceptor extends AbstractSecurityInterceptor implements Interceptor, FilterChain {
private FilterInvocationDefinitionSource objectDefinitionSource;
private boolean observeOncePerRequest = true;
public void destroy() {
}
public void init() {
}
public Class getSecureObjectClass() {
return FilterInvocation.class;
}
public void doFilter(ServletRequest request, ServletResponse response) throws java.io.IOException,ServletException {
}
public String intercept(ActionInvocation actionInvocation) throws Exception {
HttpServletRequest req = ServletActionContext.getRequest();
HttpServletResponse res = ServletActionContext.getResponse();
FilterInvocation fi = new FilterInvocation(req, res, this );
InterceptorStatusToken token = super.beforeInvocation(fi);
String ans;
try {
ans = actionInvocation.invoke();
} finally {
super.afterInvocation(token, null);
}
return ans;
}
public boolean isObserveOncePerRequest() {
return observeOncePerRequest;
}
public ObjectDefinitionSource obtainObjectDefinitionSource() {
return this.objectDefinitionSource;
}
public void setObjectDefinitionSource(FilterInvocationDefinitionSource newSource) {
this.objectDefinitionSource = newSource;
}
public void setObserveOncePerRequest(boolean observeOncePerRequest) {
this.observeOncePerRequest = observeOncePerRequest;
}
}
として exception の interceptor の後に呼び出す。
すると AccessDeneid exception を struts2 で補足できる。
※Acegiのフィルタチェインには filterSecurityInterceptor を書かない
0 コメント:
コメントを投稿