日期:2014-05-17  浏览次数:20719 次

请教struts2中拦截器栈和tokenSession在使用中出现的错误
在struts2中使用了权限拦截器和防止重复提交的拦截器,是通过定义拦截器栈的方式组合使用的。但是在程序运行过程中,每个action都返回
No result defined for action com.pde.web.action.SysUserAction and result invalid.token
这样的错误。

配置文件如下:
XML code

<package name="struts2" extends="struts-default">
        <interceptors>
            <!-- 定义一个包含权限控制的拦截器栈 -->
            <interceptor name="authority"
                class="com.pde.web.common.AuthorityInterceptor" />

            <!-- 定义一个包含权限控制的拦截器栈 -->
            <interceptor-stack name="mydefault">
                <interceptor-ref name="authority" />
                <interceptor-ref name="defaultStack" />
            </interceptor-stack>
            <!-- 定义一个包含权限控制和tokenSession的拦截器栈 -->
            <interceptor-stack name="mysession">
                <interceptor-ref name="authority" />
                <interceptor-ref name="tokenSession"/>
            </interceptor-stack>
        </interceptors>

        <!-- 定义默认拦截器 -->
        <default-interceptor-ref name="mydefault" />

        <!-- 定义全局处理结果 -->
        <global-results>
            <result name="loginout">/page/loginout.jsp</result>
        </global-results>
        
        <action name="usermenu" class="UseMenuAction">
            <result name="sucess">/page/common/left.jsp</result>
        </action>
        <action name="sysuser" class="SysUserAction">
            <interceptor-ref name="mysession">
                <param name="includeMethods">save</param> 
            </interceptor-ref>
            <interceptor-ref name="mydefault"/>
            <result name="sucess">/page/SysUserList.jsp</result>
            <result name="edit">/page/SysUserEdit.jsp</result>
            <result name="input">/page/SysUserEdit.jsp</result>
            <result name="changpwd">/page/ChangePwd.jsp</result>
        </action>
   </package>



拦截器的代码
Java code

public class AuthorityInterceptor extends MethodFilterInterceptor{
    private static final long serialVersionUID = 1358600090729208361L;
    public String doIntercept(ActionInvocation actionInvocation) throws Exception{
        ActionContext ctx=actionInvocation.getInvocationContext();

        Map session=ctx.getSession();
        SysUser user=(SysUser)session.get("SysUser");
        if(user!=null){
            return actionInvocation.invoke();
        }
        ctx.put("tip","您还没有登录,请登陆系统");
        return "loginout";
    }
}



authority拦截器是用来判断是否已经有用户登录了。
定义两个拦截器的目的是:mydefault拦截器栈的目的是要求每个访问的页面都需要登录,没有登录用户是无法访问页面的。
mysession拦截器栈的目的是保存数据时也必须用户是登录的,而且使用了防止重复提交的tokenSession拦截器。
但现在的问题是,随便访问一个action,都返回上面所说的错误。但是实在想不明白是什么原因。
请各位赐教!!!!!!!!!!!!!!!

------解决方案--------------------
No result defined for action com.pde.web.action.SysUserAction and result invalid.token
你要定义一个invalid.token result,例如
XML code
<result name="invalid.token">/page/invalidToken.jsp</result>