struts2拦截器AbstractInterceptor的问题
本帖最后由 javaltzh123 于 2013-11-25 17:44:32 编辑 环境:struts2 2.3.15 spring 3.2 hibernate 4
通过继承AbstractInterceptor对登陆进行拦截,但无法进行实例化登陆类(LoginLogoutAction.java),
struts.xml配置
<interceptor name="checkPrivilege" class="cn.rayton.struts2.interceptor.CheckPrivilegeInterceptor"></interceptor>
<!-- 定义拦截器栈 -->
<interceptor-stack name="myStack">
<interceptor-ref name="checkPrivilege"></interceptor-ref>
<interceptor-ref name="paramsPrepareParamsStack"></interceptor-ref>
</interceptor-stack>
<!-- 配置默认要使用的拦截器栈,对本包中的Action都有效 -->
<default-interceptor-ref name="myStack"></default-interceptor-ref>
拦截器部分代码:
public class CheckPrivilegeInterceptor extends AbstractInterceptor {
private static final long serialVersionUID = 1L;
@Override
public String intercept(ActionInvocation invocation) throws Exception {
// 打印出类名
System.out.println("Action:"+invocation.getAction().getClass().getName());
//找到运行的ActionProxy对象,并打印其要运行的方法名
System.out.println("Method:"+invocation.getProxy().getMethod());
if (invocation.getAction() instanceof LoginLogoutAction) {
return invocation.invoke();
}
.........其他省略
}
}
打印结果:
Action:com.sun.proxy.$Proxy32
Method:login
在原来环境 struts2 2.1.8 spring2 hibernate3中没问题,升级成struts2 2.3.15就出现这个问题,大家帮忙分析分析什么情况?
未升级之前打印出的结果为:
Action:LoginLogoutAction
Method:login
struts2 拦截器, AbstractInterceptor
[解决办法]
建议你下载下对应版本的Structs源码,看下getAction()方法的实现是否使用的动态代理,另外也可以打下断点Debug跟踪下就能找出原因了