提問:使用spring aop實現許可權管理

wzw9258發表於2006-03-08
本人在用struts+spring+hibernate,不想用acegi.
在用spring aop做許可權管理時,程式碼如下

[code
AuthenticationInterceptor.java
public class AuthenticationInterceptor implements MethodBeforeAdvice {
public void before(Method parm1, Object[] parm2, Object parm3) throws java.lang.Throwable {
if(!authentication.canExceute()){
throw new AuthenticationException(" exception start===");
}
}
}


AuthenticationException.java
public class AuthenticationException extends Exception {
public AuthenticationException(){

}
public AuthenticationException(String msg){
System.out.println("AuthenticationException==="+msg);
}
}

在執行過程中出現如下:
javax.servlet.ServletException
org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:545)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:486)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
com.zd.dmis.filter.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:70)
org.springframework.orm.hibernate.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:172)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)


root cause

com.zd.dmis.exception.AuthenticationException
com.zd.dmis.interceptor.AuthenticationInterceptor.before(AuthenticationInterceptor.java:26)
org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:52)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:144)
org.springframework.aop.framework.adapter.ThrowsAdviceInterceptor.invoke(ThrowsAdviceInterceptor.java:110)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:144)
org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:606)
com.zd.dmis.struts.action.manager.RoleAction$$EnhancerByCGLIB$$ebc682fd.execute(<generated>)
org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:105)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
com.zd.dmis.filter.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:70)
org.springframework.orm.hibernate.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:172)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)

上過錯誤是在AuthenticationInterceptor的before方法的throw new AuthenticationException(" exception start==="); 出現的,
我如何能夠根據AuthenticationInterceptor的before方法中如果沒有許可權,能夠轉向一個頁面,以便顯示直接提示資訊,謝謝各位!

相關文章