欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

了解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达到锁的目的。

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