首页> 文章> 详情

Java编程中spring boot项目动态添加拦截器Interceptor

教程分享 > Java教程 (5139) 2024-04-17 12:31:24
Java编程中spring boot项目动态添加拦截器Interceptor

1.自定义一个接口继承HandlerInterceptor接口

import org.springframework.web.servlet.HandlerInterceptor;

/**
 * url 拦截器
 * 
 * @author leftso
 *
 */
public interface UrlInterceptor extends HandlerInterceptor {

	String[] pathPatterns();
}
2.写一个配置类,动态添加自定义接口实现类实例的拦截器到容器中

import java.util.Iterator;
import java.util.Map;
import java.util.Set;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

/**
 * 添加自定义的拦截器
 * 
 * @author
 *
 */
@Configuration
public class MyMvcConfigurerAdapter extends WebMvcConfigurerAdapter {

	@Autowired
	SpringUtils springUtils;

	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		super.addInterceptors(registry);
		@SuppressWarnings("static-access")
		Map<String, UrlInterceptor> urlInterceptors = springUtils.applicationContext
				.getBeansOfType(UrlInterceptor.class);
		Set<String> keys = urlInterceptors.keySet();
		Iterator<String> it = keys.iterator();
		while (it.hasNext()) {
			String key = it.next();
			UrlInterceptor urlInterceptor=urlInterceptors.get(key);
			registry.addInterceptor(urlInterceptor).addPathPatterns(urlInterceptor.pathPatterns());
		}

	}

}
(获取spring的容器请参照本站另外一篇博客http://www.leftso.com/blog/118.html
3.自己定义一个拦截器类,实现上面自己自定义的拦截接口

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.ModelAndView;

@Component
public class MyInterceptor implements UrlInterceptor {

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		System.out.println("Before....");
		return true;
	}

	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		System.out.println("Doing....");

	}

	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		System.out.println("After....");

	}

	@Override
	public String[] pathPatterns() {
		return new String[] { "/**" };
	}

}
到这里就已经完成动态注入拦截器到容器中了。其他业务的拦截器只要实现自定义的拦截接口并用注解注解为spring组件就可以自动的被添加到容器中,不用每一次都去注册拦截器到spring容器中
https://www.leftso.com/article/119.html

相关文章
Java编程中Spring Boot整合RabbitMQ实现消息中间件RabbitMQ的使用
Java编程中spring boot项目如何获取spring容器applicationContext
java编程中spring框架5.0介绍说明/概述,spring5,spring框架,java编程
java编程为啥会出现spring框架,为什么要有Spring?
spring boot 入门之security oauth2 jwt完美整合例子,Java编程中spring boot框架+spring security框架+spring security o...
Java编程之Spring Boot通过JMSTemplate 整合ActiveMQ
Java编程中发邮件也是常用的。但是原生的jdk自带的发送邮件用起来还是比较麻烦的。spring框架在Java语言中完全是神一样的存在,通过spring框架的邮件工具来发送邮件就非常方便了,本文...
Java编程中使用spring boot1.5.2框架整合spring data mongodb10.1,来使用mongodb数据库
Java编程中spring boot项目动态添加拦截器Interceptor
Java编程之Spring Boot中使用jsp视图模板
spring boot 1.5整合redis实现spring的缓存框架,spring boot,redis
spring boot RPC 框架 Hessian,本文主要讲解spring boot整合hessian实现Spring boot RPC调用和Spring boot rpc框架hessian...
spring boot框架中常见注解说明,spring boot,JAVA
Spring Boot 入门 AOP 日志处理,这里主要讲解spring boot 中采用AOP方式进行日志的统一处理。spring 框架的处理也是一样。综合来讲,本文主要讲解了spring b...
spring boot又一个spring框架的经典项目,本文讲解spring boot入门的环境配置以及第一个项目,Spring Boot 入门教程