了解java Struts拦截器的相关操作
程序员文章站
2022-10-13 22:54:28
实现aop的方式
用于实现action之前
一般用于事物操作.
一般用于对某些未授权的页面访问的时候,进行拦截操作,拦截非法访问.
开箱即用拦截器...
实现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 */ @override public 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 */ @override public string intercept(actioninvocation invocation) throws exception { logger logger = logmanager.getlogger(); // 执行结果前 string output = "hi before"; logger.info(output); // 开始执行action string 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达到锁的目的。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: 分页显示Oracle数据库记录的类之二
推荐阅读
-
JAVA WEB快速入门之从编写一个基于SpringBoot+Mybatis快速创建的REST API项目了解SpringBoot、SpringMVC REST API、Mybatis等相关知识
-
了解Java线程优先级,更要知道对应操作系统的优先级,不然会踩坑
-
Java语言基础(4)——操作符以及相关的自动类型转换
-
2.2多线程(java学习笔记)线程状态及线程操作的相关方法
-
了解java Struts拦截器的相关操作
-
java对日期时间的相关操作方法
-
Java轻量级MVC框架Struts2 2.5详解(4)Struts2的拦截器
-
java File类的相关操作
-
浅谈Java中Lambda表达式的相关操作
-
带你了解Java Maven的打包操作