实现拦截器——编写自己的拦截器(上篇)

实现拦截器——编写自己的拦截器(上篇)

 

(Interceptor)拦截器在Struts2中有着至关重要的作用,Struts2本身定 义了丰富的拦截器,但作为一个框架(Framework)扩展性也是不可 少的,Struts2为了提高自身的灵活性允许我们自己创建拦截器, 且自定义拦截器的创建过程相当容易.

 

实现接口Interceptor

在Struts2中要编写自己的拦截器需要实现Xwork框架中的一个简单接口:Interceptor

[com.opensymphony.xwork2.interceptor.Interceptor],这个接口只规定了3个方法.

        

 

在这个接口中 destroy 和 init 方法分别执行清理和初始化工作,intercept方法执行拦截器的主要工作.

 

 

继承AbstractInterceptor

当我们不需要让拦截器执行清理和初始化工作时,Struts2还提供了一个选择AbstractInterceptor[com.opensymphony.xwork2.interceptor.AbstractInterceptor].这是一个抽象类,并实现了Interceptor接口,只是重写了destroy 和 init 方法,在方法中没有执行任何操作.

 

 

编写自己的拦截器

在上面我们提到了编写自定义拦截器的方式,拦截器直接或间接的实现Interceptor接口.现在让我们来自己写一个来了解一下.下面例子演示日志拦截器的实现,拦截器做的工作是拦截到请求后获得请求IP和请求URL 然后在磁盘上创建文件记录下IP和URL并记录请求时间,OK我们开始吧.

 

以上代码在intercept 方法中获得了IP地址和URL,然后将IP和URL作为参数传到了createLog方法中来创建日志.中途考虑到文件的操作问题单独把文件操作封装成单个实例服务,代码如下:

然后用默认的日志服务类来实现具体文件操作,代码如下:

OK,一个日志拦截器就做好了(至于拦截器的配置我就不多说了,配置问题可以看我的上篇文章).注意编写拦截器时一定要求拦截器是无状态的,因为在Struts2中并不保证每个请求都会创建单独的拦截器实例,如果拦截器带有状态则容易引发并发问题.

拦截器是Struts2中比较重要的一个功能,很好的理解拦截器可以帮助自己编写复用性很高的代码.

就和大家聊到这了,希望能对Struts2中的拦截器有所理解.下面章节会和大家聊到Struts2中的几个比较重要的拦截器,也是比较实用的一些,然后再自己来做一个拦截器,并引出Struts2拦截器编程中应注意的一些问题.

我的联系方式:

MSN: wang4717@live.cn

QQ:  471776739

Mail: wanglehappy9112@gmail.com

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring Boot拦截器Interceptor)是一种用于拦截和处理请求的组件。Spring Boot的拦截器使用了SpringMVC技术。拦截器主要用于对请求进行预处理和后处理操作,例如验证用户权限、记录日志、跳转页面等。 与过滤器(Filter)相比,拦截器有以下区别: 1. 归属不同:Filter属于Servlet技术,Interceptor属于SpringMVC技术。 2. 内容不同:Filter对所有访问进行增强,而Interceptor仅针对SpringMVC的访问进行增强。 在Spring Boot配置拦截器需要通过创建一个配置类并实现WebMvcConfigurer接口来完成。在配置类,可以使用addInterceptors方法添加拦截器,并通过addPathPatterns和excludePathPatterns方法来指定需要拦截和放行的请求路径。 例如,可以在配置类的addInterceptors方法添加一个LoginInterceptor拦截器,并使用addPathPatterns("/**")来拦截所有请求,同时使用excludePathPatterns方法来放行某些请求路径,如"/login"。 代码示例: ```java @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new LoginInterceptor()) .addPathPatterns("/**") .excludePathPatterns("/login", "/", "/retolo", "/static/**"); } } ``` 另外,可以创建多个拦截器,并在addInterceptors方法按照顺序添加,每个拦截器可以针对不同的请求路径进行配置。 请注意,以上代码的LoginInterceptor是一个自定义的拦截器类,需要根据实际需求进行编写和配置。 希望以上信息能够对你有所帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Springboot——拦截器](https://blog.csdn.net/weixin_51351637/article/details/128058053)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [Springboot实现拦截器功能](https://blog.csdn.net/weixin_52875557/article/details/123793361)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值