java中的Struts2拦截器详解

发布时间 - 2026-01-10 23:28:31    点击率:

最近在学习struts的拦截器,现在来总结一下。

1、拦截器是什么?

拦截器相当于过滤器:就是将不想要的去掉,想要的留下。拦截器抽象出一部分代码可以用来完善原来的action。同时可以减轻代码冗余,提高重用率。通俗地讲就是一张网,过滤掉不需要的沙子,留下水。

2、拦截器的作用:

拦截器可以构成特定的功能。比如权限认证、日志记录和登陆判断。

3、拦截器的原理

  

其每一个Action请求都在拦截器中,每一个action可以将操作转交给下面的拦截器,也可以直接退出到界面上。

4、定义拦截器:

(1)自定义一个实现Interceptor接口(不过我初学者一般直接实现框架中的Interceptor)

(2)在struts.xml中注册定义的拦截器

(3)可以需要的action中引用拦截器

Interceptor接口声明了三个方法

public interface Interceptor extends Serializable {
 
  void destroy();
 
  void init();
 
  String intercept(ActionInvocation invocation) throws Exception;
}

Init方法是在action作用之前调用,就是开始给烂机器的初始化操作。

Destory方法在拦截器被垃圾回收之前调用,用来回收init方法初始化的资源。

interceptor方法是拦截器的主要操作。如果需要调用后续的Action或者拦截器,只需要在该方法中调用invocation.invoke()方法即可,在该方法调用的前后可以插入Action调用前后拦截器需要做的方法。

现在对用户登录进行拦截,代码如下:

public String intercept(ActionInvocation invocation) throws Exception {
    
    System.out.println("在action执行之前");
    ActionContext actionContext=invocation.getInvocationContext();
    Map<String,Object> session=actionContext.getSession();
    
    Object currentUser=session.get("currentUser");
    String result=null;
    if(currentUser!=null){
      result=invocation.invoke();
      
    }else{
      
      HttpServletRequest request=(HttpServletRequest)invocation.getInvocationContext().get(ServletActionContext.HTTP_REQUEST);
      request.setAttribute("error", "请先登录");
      result="error";
    }
    System.out.println("result+"+result);
    System.out.println("在action执行之后");
    return result;
  }

注册拦截器:

<interceptors>
       <interceptor name="myInterceptor"
       class="com.fangchao.interceptor.MyInterceptor"></interceptor>
       <interceptor name="loginInterceptor"
       class="com.fangchao.interceptor.LoginInterceptor"></interceptor>
       
       <interceptor-stack name="myStack">
         <interceptor-ref name="loginInterceptor"></interceptor-ref>
         <interceptor-ref name="defaultStack"></interceptor-ref>  
       </interceptor-stack>
     </interceptors>

上述代码中的interceptor-stack是个拦截器栈。到目前为止,就是在下面引用时,比较方便。一般来讲,每个action都会使用defaultStack。

拦截器参数:

配置参数:

  • excludeMethods:过滤掉不使用拦截器的方法
  • includeMethods:使用拦截器的方法。

有两种配置方式:

<interceptor-ref name="validation">
 <param name="excludeMethods">myValidationExcudeMethod</param>
</interceptor-ref>
<interceptor-ref name="workflow">
 <param name="excludeMethods">myWorkflowExcludeMethod</param>
</interceptor-ref>

或者

<interceptor-ref name="defaultStack">
  <param name="validation.excludeMethods">myValidationExcludeMethod</param>
  <param name="workflow.excludeMethods">myWorkflowExcludeMethod</param>
</interceptor-ref>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# struts拦截器  # struts2  # 拦截器  # struts2拦截器详解  # 修改request的parameter的几种方式总结  # Struts2之Action接收请求参数和拦截器详解  # Struts2源码分析之ParametersInterceptor拦截器  # 解决struts2 拦截器修改request的parameters参数失败的问题  # 过滤掉  # 是个  # 是在  # 都在  # 不需要  # 只需  # 要在  # 请先  # 可以直接  # 自定义  # 有两种  # 将不  # 用户登录  # 大家多多  # 可以用来  # 器中  # 张网  # 就是在  # 不过我 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何快速搭建个人网站并优化SEO?  Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全  Swift中循环语句中的转移语句 break 和 continue  微信小程序 配置文件详细介绍  Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】  Laravel如何与Pusher实现实时通信?(WebSocket示例)  清除minerd进程的简单方法  Laravel如何使用Livewire构建动态组件?(入门代码)  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  Laravel Session怎么存储_Laravel Session驱动配置详解  Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用  如何用wdcp快速搭建高效网站?  UC浏览器如何设置启动页 UC浏览器启动页设置方法  Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  如何在IIS7上新建站点并设置安全权限?  如何安全更换建站之星模板并保留数据?  详解Huffman编码算法之Java实现  Laravel如何处理CORS跨域请求?(配置示例)  北京企业网站设计制作公司,北京铁路集团官方网站?  如何用IIS7快速搭建并优化网站站点?  如何批量查询域名的建站时间记录?  javascript中数组(Array)对象和字符串(String)对象的常用方法总结  Laravel如何配置Horizon来管理队列?(安装和使用)  今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  如何打造高效商业网站?建站目的决定转化率  Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】  千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】  Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】  Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践  ,怎么在广州志愿者网站注册?  如何做网站制作流程,*游戏网站怎么搭建?  html5如何实现懒加载图片_ intersectionobserver api用法【教程】  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  php做exe能调用系统命令吗_执行cmd指令实现方式【详解】  javascript读取文本节点方法小结  Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】  简单实现Android文件上传  Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解  Laravel怎么实现模型属性的自动加密  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭  详解Android图表 MPAndroidChart折线图  制作旅游网站html,怎样注册旅游网站?  教你用AI将一段旋律扩展成一首完整的曲子  成都网站制作公司哪家好,四川省职工服务网是做什么用?  如何在Windows虚拟主机上快速搭建网站?