Struts中的拦截器未登录的session配置

我用的是struts2.3版本。

先贴上struts.xml中的拦截器配置:

 <interceptors>
          <!--  配置一个自定义拦截器器 -->
            <interceptor name="loginCheck"
                class="com.tutorialspoint.logins.loginInterceptor">
            </interceptor>
            <!-- 再配置一个拦截的排列。我的理解就是先经过loginCheck拦截器器,再进行后面的操作;defaultStack代表的应该是之后的操作 -->
            <interceptor-stack name="myStack">
                <interceptor-ref name="loginCheck" />
                <interceptor-ref name="defaultStack" />
            </interceptor-stack>
        </interceptors>
        <!-- 创建默认拦截排列 也就是所有的action都要接受拦截-->
        <default-interceptor-ref name="myStack"></default-interceptor-ref>

再贴上拦截器指向的类:这个类把所有未登录session的账号拦截,返回到登录页面。

public class loginInterceptor extends AbstractInterceptor{
    @Override
    public String intercept(ActionInvocation actionInvocation) throws Exception
    {
            Map session = actionInvocation.getInvocationContext().getSession();

            if(null == session.get("email")){
                System.out.println("Session未登陆");
                return "unlogin";
            }
            return actionInvocation.invoke();               
    }
}

下面这个也就是unlogin所映射的jsp。

<global-results>
            <result name="unlogin">/templets/login.jsp</result>
            <result name="error">/error.jsp</result>
        </global-results>

上面配置完也就是对所有的action 进行拦截。如果不想让aciton被拦截,
则要像下面的配置action ,例如:在登录页面已经明白是未登录的,不需要拦截。。

<action name="login" class="com.tutorialspoint.logins.LoginAction"
            method="execute">
            <!-- 自定义排列 应该是优先级大于上面的 myStack排列。所以它不需要经过loginCheck拦截器-->
            <interceptor-ref name="defaultStack"></interceptor-ref>
            <result name="success">/templets/login.jsp</result>
        </action>

拦截器的会在action的方法实现之前进行拦截,也可以在之后进行拦截。

猜你喜欢

转载自blog.csdn.net/a748448660/article/details/52787096