Struts 拦截器
介绍
实现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 拦截器相关推荐
- 利用Struts拦截器限制上传图片的格式和大小
在这之前 Struts的一个核心功能就是大量的拦截器,既然是框架,那么自然也就贴心地为我们准备好了各种常用的功能,比如这里即将讨论的如何限制上传图片的格式和大小.那么既然是使用Struts已经写好的拦 ...
- Struts 拦截器权限控制【通过拦截器实现登录后跳转到登录前页面】
应用情形:在web项目中,经常会遇到用户未登录或SESSION失效时用户发出非法的权限操作,如新闻的评论.文件的下载等等,在此我们可以使用struts拦截器对该用户发出的请求进行拦截,拦截后判断用户是 ...
- struts拦截器+注解实现网络安全要求中的日志审计功能
J2EE项目中出于安全的角度考虑,用户行为审计日志功能必不可少,通过本demo可以实现如下功能: 1.项目中记录审计日志的方法. 2.struts拦截器的基本配置和使用方法. 3.struts拦截器中 ...
- Struts拦截器使用
创建拦截器java程序 package cn.itcast.oa.util;import com.opensymphony.xwork2.ActionInvocation; import com.op ...
- java struts 拦截器_java框架篇---struts实现拦截器
Struts2的拦截器和Servlet过滤器类似.在执行Action的execute方法之前,Struts2会首先执行在struts.xml中引用的拦截器,在执行完所有引用的拦截器的intercept ...
- 【struts2+hibernate+spring项目实战】用户登录校验(struts拦截器)
一.概述 项目中所有页面均放入WEB-INF,所有页面安全性得到了很大程度的提高.但是当用户登录后长时间没有操作时,会造成Session数据的过期,如果此时获取Session中的数据,必定会引发WEB ...
- struts 2——拦截器的实现实例
struts 2--拦截器的实现实例 目录 说明 配置文件web.xml 配置文件struts.xml action类login.java 实体类user.java 拦截器myinterceptor. ...
- 拦截器,过滤器,监听器原理
过滤器 创建一个Filter 只需两个步骤: (1)创建Filter 处理类: (2)在web.xml 文件中配置Filter . 创建Filter 必须实现javax.servlet.Filte ...
- struts2 javaweb 过滤器、监听器 拦截器 原理
转: 过滤器.监听器 拦截器 过滤器 创建一个 Filter 只需两个步骤: (1)创建 Filter 处理类: (2)在 web.xml 文件中配置 Filter . 创建 Filter 必须实现 ...
最新文章
- php程序员面试题(持续补充,偏中级面试题)
- 网站页面内链如何布局才更有利于SEO?
- 通过示例休眠–第1部分(删除孤儿)
- kafka python框架_Python中如何使用Apache Avro——Apache的数据序列化系统
- 这些“大学”,将被除名!
- 微信小程序地图组件去除iconPath
- 3DLC系列之:2D 曲线面板
- C++ MFC 大湿兄作品!游戏自动跳跳防AFK 支持 自动按空格 取消 隐藏以及显示游戏。方便在公司玩。支持最小化到托盘 魔兽世界防AFK掉线
- OV9281+RK3399Pro 双摄像头移植
- easyX——图形库
- 微信公众号的类型和功能
- 获取股票历史数据——数据采集(1)
- 华为服务器2488H V6的ibmc接口配置
- Variable Values‘ hover uses the same modifier as ‘Combined Hover‘ hover.
- 怎么都2200年了,还有人不愿意交社保???
- AVCON6 系统管理平台 download.action 任意文件下载漏洞
- 这世上没有末路,你从不曾孤独
- OpenCV开发笔记(六十三):红胖子8分钟带你深入了解SIFT特征点(图文并茂+浅显易懂+程序源码)
- APP多平台快速切换
- 怎么选择合适的机柜?网络机柜服务器机柜