springboot中自定义拦截器

拦截器应用

如何自定义拦截器?
一句话:自定义类实现HandlerInterceptor并重写其抽象方法.
具体代码如下所示:


1:先定义一个拦截器,MyInterceptor ,MyInterceptor2,MyInterceptor3
这里给出一个实例

public class MyInterceptor implements HandlerInterceptor{

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		System.out.println("进入拦截器1...............");
		return true;//true 放行
	}

	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		
		System.out.println("进入拦截器之后调用...............");
		
	}

	
	
	

}

2:自定义一个配置类

@Configuration
public class MyWebConfig extends WebMvcConfigurerAdapter {
	
	@Bean
	public MyInterceptor getMyInterceptor() {
		
		return new MyInterceptor();
	}
	@Bean
	public MyInterceptor2 getMyInterceptor2() {
		
		return new MyInterceptor2();
	}
	@Bean
	public MyInterceptor3 getMyInterceptor3() {
		
		return new MyInterceptor3();
	}
	
	
	/**
	 * 
	 * 	配置拦截器
	 * 	配置多个... 谁在上边谁先执行
	 * 	如下配置:执行顺序	3--1---2
	 */
	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		//拦截器3
		InterceptorRegistration interceptor3 = registry.addInterceptor(getMyInterceptor3());
		interceptor3.addPathPatterns("/**");//拦截所有路径
		interceptor3.excludePathPatterns("/index");//不拦截的路径
		//拦截器1
		InterceptorRegistration interceptor = registry.addInterceptor(getMyInterceptor());
		interceptor.addPathPatterns("/**");//拦截所有路径
		interceptor.excludePathPatterns("/index");//不拦截的路径
		//拦截器2
		InterceptorRegistration interceptor2 = registry.addInterceptor(getMyInterceptor2());
		interceptor2.addPathPatterns("/**");//拦截所有路径
		interceptor2.excludePathPatterns("/index");//不拦截的路径

	}
}

到这里在spring boot中使用拦截器就成功了.
这里赘述一点.我们在使用拦截器的额时候.没必要直接自定义类实现HandlerInterceptor并重写其抽象方法
由继承关系:
HandlerInterceptorAdapter—>AsyncHandlerInterceptor–>HandlerInterceptor
可知:直接继承HandlerInterceptorAdapter(拦截器适配器),这样需要用哪个就重写哪个方法,即可

public class MyInterceptor2 extends HandlerInterceptorAdapter {

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		System.out.println("进入拦截器2...............");
		return super.preHandle(request, response, handler);
	}
}

说道适配器模式,这里,举个简单的栗子:

适配器就是向电源,像usb插头.
假如:现在一个工厂需要出厂三种手机,iphone,xiaomi,huawei
这时候,我们一般是约定手机功能.这里一般使用接口来定义

public interface PhoneFactory {
	String call();
	void message();
	void play();
}

这时候需求是:
华为可以玩游戏可以发短信.
xiaomi 可以打电话可以玩游戏
iphone只能玩游戏.
这个时候,如果我们直接自定义类实现PhoneFactory 接口,这样就要重写全部抽象方法.代码就冗余

public class Huawei implements PhoneFactory {

	@Override
	public String call() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void message() {
		// TODO Auto-generated method stub

	}

	@Override
	public void play() {
		// TODO Auto-generated method stub

	}

}

改进思路: 我们自定义抽象类phoneAdapter实现PhoneFactory 接口,对其中的方法进行空实现

public class phoneAdapter implements PhoneFactory {

	@Override
	public String call() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void message() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void play() {
		// TODO Auto-generated method stub
		
	}

}

此时再自定义类继承其phoneAdapter抽象类.这样需要哪个就直接重写哪个即可

public class Huawei extends phoneAdapter {

	@Override
	public void message() {
		System.out.println("发短信");
	}

	@Override
	public void play() {
		
		System.out.println("玩游戏");
	}

	
}

这就是适配器模式.

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringBoot允许我们自定义拦截器来拦截请求并进行一些逻辑处理。下面是SpringBoot自定义拦截器的步骤: 1.创建一个拦截器类并实现HandlerInterceptor接口,该接口有三个方法:preHandle、postHandle和afterCompletion。其preHandle方法在请求处理之前被调用,postHandle方法在请求处理之后被调用,afterCompletion方法在视图渲染之后被调用。 2.在拦截器类上使用@Component注解将其注入到Spring容器。 3.创建一个配置类并实现WebMvcConfigurer接口,该接口有一个addInterceptors方法,可以用来添加自定义拦截器。 4.在addInterceptors方法添加自定义拦截器,并指定拦截的路径。 下面是一个简单的示例: 1.创建一个拦截器类并实现HandlerInterceptor接口: ```java @Component public class MyInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 在请求处理之前进行逻辑处理 // 如果返回false,则请求不会被处理 return true; } } ``` 2.创建一个配置类并实现WebMvcConfigurer接口: ```java @Configuration public class MyWebMvcConfigurer implements WebMvcConfigurer { @Autowired private MyInterceptor myInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { // 添加自定义拦截器,并指定拦截路径 registry.addInterceptor(myInterceptor).addPathPatterns("/**"); } } ``` 在上面的示例,我们创建了一个名为MyInterceptor的拦截器类,并将其注入到Spring容器。然后,我们创建了一个名为MyWebMvcConfigurer的配置类,并在其添加了我们的自定义拦截器,并指定了拦截的路径为“/**”。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值