Struts2 拦截器 (Interceptor)

204 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第5天,点击查看活动详情

前言

  本教程是 Struts2 框架提供的拦截功能实现,供大家参考学习,我们知道当 FilterDispartcher 拦截到用户请求后,大量拦截器会对用户请求进行处理,然后才能调用Action类中的方法来处理请求,可见拦截器在 Struts2 框架中的核心位置。

  本教程附带源代码,通过一个小demo,来感受一下拦截器的实现。

Snipaste_2022-10-03_11-10-47.png

1、实现思路

  • 1.首先创建一个项目,名为 Struts-Interceptor
  • 2.创建类Action命名为 LoginAction.java
  • 3.在根目录下,创建一个 xml 文件,名为 struts.xml
  • 4.把 jar 包导入 lib 目录下
  • 5.在 web.xml 中配置过滤器
  • 6.创建一个实体类 User,其中的属性值与 form 表单提交的数据保持一致
  • 7.编写视图jsp等文件
  • 8.编写拦截器实现类(*)
  • 9.在struts.xml 配置实现类(*)

2、项目目录

image-20221003111500330.png

3、具体实现

  在上次的Struts2实现校验器的基础上来编写此次教程,可以参考我上次的文章。然后,我们开始编写拦截器类,创建一个类名为MyInterceptor,继承 AbstractInterceptor 类,然后重写该类的方法,详细代码如下。

package sqgxy.xmp.Interceptor;
​
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
​
import sqgxy.xmp.action.LoginAction;
​
public class MyInterceptor extends AbstractInterceptor {
​
    
    private static final long serialVersionUID = 1L;
​
    @Override
    public String intercept(ActionInvocation arg0) throws Exception {
        // TODO Auto-generated method stub
        LoginAction loginAction = (LoginAction)arg0.getAction();  
        
        if(loginAction.getUser().getUserName().equals("admin")){
            return Action.INPUT;
        }
        return arg0.invoke();
    }
}

  接着我们在struts.xml来配置我们自定义的拦截器,使得生效,核心代码如下。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
    <package name="default" namespace="/default" extends="struts-default">
        <interceptors>
            <interceptor name="MyInterceptor" class="sqgxy.xmp.Interceptor.MyInterceptor"></interceptor>
        </interceptors>
        <default-interceptor-ref name=""></default-interceptor-ref>
            <!--
                跳转***
            -->    
            <!-- 在result后面配置 -->   
            <!-- 系统默认拦截器 -->
            <interceptor-ref name="defaultStack"></interceptor-ref>
            <!-- 系统自定义拦截器 -->
            <interceptor-ref name="MyInterceptor"></interceptor-ref>
        </action>
    </package>
</struts>

4、效果演示

1)当用户是admin时被拦截,与我们的代码达成一致效果。

image-20221003113122909.png

其他用户正常登录.png

2)当时其他用户是,登录成功。

当用户是admin时被拦截.png

总结

  以上就是Struts2框架为我们提供的拦截器,虽然Struts2框架已经为我们提供了很多拦截器,当我们有些自定义拦截时,便可通过上面方法实现,先是自定义拦截规则,然后在struts.xml配置使得生效,本文的分享到此结束。