介绍

实现aop的方式
用于实现action之前,之后执行
一般用于事物操作.
一般用于对某些未授权的页面访问的时候,进行拦截操作,拦截非法访问.

开箱即用拦截器

            <!-- 拦截器 --><interceptor-ref name="params"/>  <!-- 传递属性拦截器 --><interceptor-ref name="timer"/> <!-- 测算执行时间 -->

必须有传递属性这个拦截器

运行输出日志如下

2019-03-24 03:50:19.231 [DEBUG] com.opensymphony.xwork2.ognl.SecurityMemberAccess.isAccessible(SecurityMemberAccess.java:67) - Checking access for [target: com.ming.HelloWorldAction@33e67d25, member: public java.lang.String com.ming.HelloWorldAction.getName(), property: name]
2019-03-24 03:50:19.232 [INFO ] com.opensymphony.xwork2.interceptor.TimerInterceptor.doLog(TimerInterceptor.java:205) - Executed action [//hello!execute] took 12 ms.

可以看到这个action一共运行耗时12ms

自定义拦截器

需要继承该抽象类,并实现其方法 即 com.opensymphony.xwork2.interceptor.AbstractInterceptor 抽象类

代码如下

package com.ming;import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;public class MyInterceptor extends AbstractInterceptor {/*** Override to handle interception** @param invocation*/@Overridepublic String intercept(ActionInvocation invocation) throws Exception {return null;}
}

实现该类的interceptor方法

package com.ming;import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;public class MyInterceptor extends AbstractInterceptor {/*** Override to handle interception** @param invocation*/@Overridepublic String intercept(ActionInvocation invocation) throws Exception {Logger logger = LogManager.getLogger();// 执行结果前String output = "hi before";logger.info(output);// 开始执行ActionString result = invocation.invoke();// 执行结果后output = "hi after";logger.info(output);// 继续传递到下一个拦截器return result;}
}

更改配置文件

            <!-- 拦截器 --><interceptor-ref name="params"/>  <!-- 传递属性拦截器 --><interceptor-ref name="timer"/> <!-- 测算执行时间 --><interceptor-ref name="MyInterceptor"/><!-- 成功返回页面 --><result name="success">/HelloWorld.jsp</result><result name="error">/error.html</result>

效果如下

控制台输出结果如下

2019-03-24 04:37:24.086 [DEBUG] com.opensymphony.xwork2.ognl.SecurityMemberAccess.isAccessible(SecurityMemberAccess.java:67) - Checking access for [target: com.ming.HelloWorldAction@5121691d, member: public void com.ming.HelloWorldAction.setName(java.lang.String), property: name]
2019-03-24 04:37:24.087 [INFO ] com.ming.MyInterceptor.intercept(MyInterceptor.java:19) - hi before
2019-03-24 04:37:24.089 [DEBUG] com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:430) - Executing action method = execute
2019-03-24 04:37:24.106 [DEBUG] com.opensymphony.xwork2.ognl.SecurityMemberAccess.isAccessible(SecurityMemberAccess.java:67) - Checking access for [target: com.ming.HelloWorldAction@5121691d, member: public java.lang.String com.ming.HelloWorldAction.execute() throws java.lang.Exception, property: null]
2019-03-24 04:37:24.143 [DEBUG] com.opensymphony.xwork2.ognl.SecurityMemberAccess.isAccessible(SecurityMemberAccess.java:67) - Checking access for [target: org.apache.struts2.result.ServletDispatcherResult@2e4369c6, member: public void org.apache.struts2.result.StrutsResultSupport.setLocation(java.lang.String), property: location]
2019-03-24 04:37:24.143 [DEBUG] com.opensymphony.xwork2.ognl.SecurityMemberAccess.isAccessible(SecurityMemberAccess.java:67) - Checking access for [target: org.apache.struts2.result.ServletDispatcherResult@2e4369c6, member: public void org.apache.struts2.result.StrutsResultSupport.setLocation(java.lang.String), property: location]
2019-03-24 04:37:24.150 [DEBUG] org.apache.struts2.result.ServletDispatcherResult.doExecute(ServletDispatcherResult.java:127) - Forwarding to location: /error.html
2019-03-24 04:37:24.158 [DEBUG] com.opensymphony.xwork2.conversion.impl.InstantiatingNullHandler.nullPropertyValue(InstantiatingNullHandler.java:98) - Entering nullPropertyValue [target=[com.ming.HelloWorldAction@5121691d, com.opensymphony.xwork2.DefaultTextProvider@2e34626e], property=struts]
2019-03-24 04:37:24.175 [INFO ] com.ming.MyInterceptor.intercept(MyInterceptor.java:26) - hi after
2019-03-24 04:37:24.176 [INFO ] com.opensymphony.xwork2.interceptor.TimerInterceptor.doLog(TimerInterceptor.java:205) - Executed action [//hello!execute] took 89 ms.

可以看到,由于配置了3个拦截器,拦截器被顺序执行.
在执行前后分别执行了两个操作

这就是面向切面编程
此处可以添加事物 锁 其中锁可以用redis实现,达到同时多个tomcat实例读取数据库的时候,进行加锁操作,使用redis达到锁的目的

Struts 拦截器相关推荐

  1. 利用Struts拦截器限制上传图片的格式和大小

    在这之前 Struts的一个核心功能就是大量的拦截器,既然是框架,那么自然也就贴心地为我们准备好了各种常用的功能,比如这里即将讨论的如何限制上传图片的格式和大小.那么既然是使用Struts已经写好的拦 ...

  2. Struts 拦截器权限控制【通过拦截器实现登录后跳转到登录前页面】

    应用情形:在web项目中,经常会遇到用户未登录或SESSION失效时用户发出非法的权限操作,如新闻的评论.文件的下载等等,在此我们可以使用struts拦截器对该用户发出的请求进行拦截,拦截后判断用户是 ...

  3. struts拦截器+注解实现网络安全要求中的日志审计功能

    J2EE项目中出于安全的角度考虑,用户行为审计日志功能必不可少,通过本demo可以实现如下功能: 1.项目中记录审计日志的方法. 2.struts拦截器的基本配置和使用方法. 3.struts拦截器中 ...

  4. Struts拦截器使用

    创建拦截器java程序 package cn.itcast.oa.util;import com.opensymphony.xwork2.ActionInvocation; import com.op ...

  5. java struts 拦截器_java框架篇---struts实现拦截器

    Struts2的拦截器和Servlet过滤器类似.在执行Action的execute方法之前,Struts2会首先执行在struts.xml中引用的拦截器,在执行完所有引用的拦截器的intercept ...

  6. 【struts2+hibernate+spring项目实战】用户登录校验(struts拦截器)

    一.概述 项目中所有页面均放入WEB-INF,所有页面安全性得到了很大程度的提高.但是当用户登录后长时间没有操作时,会造成Session数据的过期,如果此时获取Session中的数据,必定会引发WEB ...

  7. struts 2——拦截器的实现实例

    struts 2--拦截器的实现实例 目录 说明 配置文件web.xml 配置文件struts.xml action类login.java 实体类user.java 拦截器myinterceptor. ...

  8. 拦截器,过滤器,监听器原理

    过滤器 创建一个Filter 只需两个步骤:  (1)创建Filter 处理类: (2)在web.xml 文件中配置Filter .  创建Filter 必须实现javax.servlet.Filte ...

  9. struts2 javaweb 过滤器、监听器 拦截器 原理

    转: 过滤器.监听器 拦截器 过滤器 创建一个 Filter 只需两个步骤: (1)创建 Filter 处理类: (2)在 web.xml 文件中配置 Filter . 创建 Filter 必须实现 ...

最新文章

  1. php程序员面试题(持续补充,偏中级面试题)
  2. 网站页面内链如何布局才更有利于SEO?
  3. 通过示例休眠–第1部分(删除孤儿)
  4. kafka python框架_Python中如何使用Apache Avro——Apache的数据序列化系统
  5. 这些“大学”,将被除名!
  6. 微信小程序地图组件去除iconPath
  7. 3DLC系列之:2D 曲线面板
  8. C++ MFC 大湿兄作品!游戏自动跳跳防AFK 支持 自动按空格 取消 隐藏以及显示游戏。方便在公司玩。支持最小化到托盘 魔兽世界防AFK掉线
  9. OV9281+RK3399Pro 双摄像头移植
  10. easyX——图形库
  11. 微信公众号的类型和功能
  12. 获取股票历史数据——数据采集(1)
  13. 华为服务器2488H V6的ibmc接口配置
  14. Variable Values‘ hover uses the same modifier as ‘Combined Hover‘ hover.
  15. 怎么都2200年了,还有人不愿意交社保???
  16. AVCON6 系统管理平台 download.action 任意文件下载漏洞
  17. 这世上没有末路,你从不曾孤独
  18. OpenCV开发笔记(六十三):红胖子8分钟带你深入了解SIFT特征点(图文并茂+浅显易懂+程序源码)
  19. APP多平台快速切换
  20. 怎么选择合适的机柜?网络机柜服务器机柜

热门文章

  1. 11.4. String 字符串处理
  2. 面向微软合作伙伴和客户的Azure应用托管正式可用
  3. 深入理解HTTP协议、HTTP协议原理分析【转】
  4. mysql安装图解及报错解决
  5. Sql Server 字段类型说明
  6. JDK源码(20)-Thread
  7. React 测试指南
  8. Linux truncate的使用方法介绍
  9. 网络包排错指南-类linux 平台
  10. 安装opencv3.4.0报错