配置Struts2的登录拦截器

对用户的登录信息进行验证,拦截非法用户的访问在开发中是非常常见的,下面是本人在学习中对拦截器的一些理解及配置:

1、编写一个登录的拦截器类loginInterceptor,继承MethodFilterInterceptor:

public class LoginInterceptor extends MethodFilterInterceptor {

       @Override

       public String doIntercept(ActionInvocation invocation) throws Exception {

              return null;

       }

}

 //关于Interceptor、AbstractInterceptor和MethodFilterInterceptor三者的关系读者可以自己搜索



2、在重写的方法体里面对要验证的用户信息进行判断,如果为空,则返回登录页面;否则,跳转到登录页面:

//获取session里面的用户信息

Object obj = ActionContext.getContext().getSession().get("loginStaff");

              if(obj == null){

                     /**友好信息 start*/

                     // 1 获得当前运行action

                     Object action = invocation.getAction();

                     // 2 判断运行时是否是ActionSupport

                     if(action instanceof ActionSupport){

                            ActionSupport actionSupport = (ActionSupport) action;

                            actionSupport.addFieldError("", "请登录");

                     }

                     /**友好信息 end*/

                     // 没有登录,需要登录

                     return "login";

              }

              //登录,放行

              return invocation.invoke();

 

 

3、在struts2的配置文件中配置

<!-- 2.2 拦截器配置

第一步>>>先声明拦截器:

<interceptor name="loginInterceptor" class="拦截器类的全限定名"></interceptor>

第二步>>>自定义拦截器:

方法1:每一个action单独使用,需要多次引用,否则默认拦截器将被覆盖

              <action name="">

                     <interceptor-ref name="defaultStack"></interceptor-ref>

                     <interceptor-ref name="loginInterceptor"></interceptor-ref>

              </action>


       方法2:将多个拦截器打包生成自定义栈,action使用栈

              * 自定义拦截器栈

              <interceptor-stack name="loginStack">

                     <interceptor-ref name="defaultStack"></interceptor-ref>

                     <interceptor-ref name="loginInterceptor"></interceptor-ref>

              </interceptor-stack>

              * action引用

              <action name="">

                     <interceptor-ref name="loginStack"></interceptor-ref>

              </action>


       方法3:将自定义栈把默认栈覆盖

              <default-interceptor-ref name="loginStack"></default-interceptor-ref>

-->

       <interceptors>

              <!-- @1)声明(注册) -->

              <interceptor name="loginInterceptor" class="com.itheima.crm.web.interceptor.LoginInterceptor"></interceptor>

              <!-- @2)自定义拦截器栈 -->

              <interceptor-stack name="loginStack">

                     <interceptor-ref name="defaultStack"></interceptor-ref>

                     <!-- 自定义拦截需要对login不进行拦截

                            * excludeMethods 配置不进行拦截的方法,多个方法使用逗号分隔

                * includemethods 配置进行拦截的方法,多个方法使用逗号分隔

                     -->

                     <interceptor-ref name="loginInterceptor">

                            <param name="excludeMethods">login</param>

                     </interceptor-ref>

              </interceptor-stack>

       </interceptors>

             

       <!-- @3)声明默认 -->

       <default-interceptor-ref name="loginStack"></default-interceptor-ref>

<!—因为对所有的页面进行拦截时,都会返回一个login页面,所有定义一个全局的结果集

 -->

       <!-- @4)全局结果集 -->

       <global-results>

              <result name="login">/WEB-INF/pages/login.jsp</result>

       </global-results>

 

 以上就是本人对拦截器的一些理解,如有不足,还望指出!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值