读书人

struts2拦截器AbstractInterceptor的有

发布时间: 2013-11-29 13:49:33 作者: rapoo

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跟踪下就能找出原因了

读书人网 >J2SE开发

热点推荐