关于Struts2拦截器的使用,有点问题,帮我看一看!!我的自定义拦截器类是这样写的public class SoougoIntercepte extends AbstractInterceptor {    public String intercept(ActionInvocation invocation) throws Exception {
        Map session = ActionContext.getContext().getSession();
        Users user = (Users) session.get("nonceuser");
        if (user == null) {
            return "login";
        } else {
            return invocation.invoke();
        }
    }
}我在struts.xml这样配置拦截器
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
    <package name="industryinfo" extends="struts-default">
      <interceptors>
           <interceptor name="checkLogin" class="soougo.com.web.intercepte.SoougoIntercepte" />
           <interceptor-stack name="mystack">
              <interceptor-ref name="defaultStack" />
              <interceptor-ref name="checkLogin" />
           </interceptor-stack>
        </interceptors>
        <default-interceptor-ref name="mystack" />
<global-results>
    <result name="login">/consumerdirectory/userfunction/UserLogin.jsp</result>
</global-results>
        <!---以下这个action是我用来处理登录的------------------->
        <action name="ActionUserLogins" class="soougo.com.web.user.ActionUserLogin">
            <result name="success" type="redirect">/consumerdirectory/userfunction/UserWelcome.jsp</result>
            <result name="error" type="redirect">/consumerdirectory/userfunction/UserLogin.jsp</result>
            <param name="savepathid">1</param>
            <interceptor-ref name="defaultStack"/>
        </action>
<!------------------其它Action配置类似以下------------------------------->
         <action name="RequisitionBrowses" class="soougo.com.web.requisition.RequisitionBrowse">
                <result name="success" type="redirect">/consumerdirectory/adispose/RequisitionBrowse.jsp?pageindex=${pageindex}</result>
                <result name="error" type="redirect">/supervisordirectory/industrymanager/errorinfo.jsp</result>
                <param name="cpageindex">0</param>
                <param name="maxrows">8</param>
            </action>
            <action name="ImageshowBrowses" class="soougo.com.web.requisition.ImageshowBrowse">
                <result name="success" type="redirect">/consumerdirectory/adispose/ImageshowListbrowse.jsp?cpageindex=${cpageindex}&amp;pageindexs=${pageindexs}&amp;adkey=${adkey}</result>
                <result name="error" type="redirect">/supervisordirectory/industrymanager/errorinfo.jsp</result>
                <param name="cpageindex">0</param>
                <param name="maxrows">8</param>
            </action>
       <action........></action>       <action........></action>       <action........></action>       <action........></action>       ...................
    </package>
</struts>我的目标是,当用户Session为空,也就是说没有登录时,系统总是重新定向到登录界面,但是现在我的问题是,系统不能完成重定向到登录界面,也就是ActionUserLogins,如果不配置其使用struts2默认的拦截器也像能起到拦截的作用,高手帮我看一看,我的xml应该怎么配置

解决方案 »

  1.   

    没用过struts2的自定义拦截器,打算用spring的spring-security
      

  2.   

    在拦截器里面取得request,然后取得请求的url,
    或者(我记得)直接取得请求的struts类的name就是action name="ActionUserLogins" 
    硬编码判断下是否是登陆请求,是的话不执行拦截器后续逻辑,
    这个问题以前遇到过,手头现在没源码贴给lz了,没用自己的本。
      

  3.   


    public class AuthorityInterceptor extends AbstractInterceptor {
    public String intercept(ActionInvocation invocation) throws Exception {
    ActionContext ctx=invocation.getInvocationContext();
    User user=(User)ctx.getSession().get("userInfo");
    if(user==null){
    return "notLogin";
    }
    return invocation.invoke();
    }
    }
      

  4.   

    楼主好像把interceptor应用到全部的action了,包括了LoginAction吧,这样肯定有错了。
    把这句<default-interceptor-ref name="mystack" /> 去掉吧。