持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第5天,点击查看活动详情
前言
本教程是 Struts2 框架提供的拦截功能实现,供大家参考学习,我们知道当 FilterDispartcher 拦截到用户请求后,大量拦截器会对用户请求进行处理,然后才能调用Action类中的方法来处理请求,可见拦截器在 Struts2 框架中的核心位置。
本教程附带源代码,通过一个小demo,来感受一下拦截器的实现。
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、项目目录
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时被拦截,与我们的代码达成一致效果。
2)当时其他用户是,登录成功。
总结
以上就是Struts2框架为我们提供的拦截器,虽然Struts2框架已经为我们提供了很多拦截器,当我们有些自定义拦截时,便可通过上面方法实现,先是自定义拦截规则,然后在struts.xml配置使得生效,本文的分享到此结束。