Springboot之拦截器

2023-05-04 18:00:44 浏览数 (1)

1. 拦截器介绍

拦截器是在servlet执行之前执行的程序(这里就是controller代码执行之前),它主要是用于拦截用户请求并作相应的处理,比如说可以判断用户是否登录,做相关的日志记录,也可以做权限管理。

我的博客后端用拦截器做登录权限拦截

2.自定义拦截器

直接上代码
代码语言:javascript复制
public class UserInterceptor implements HandlerInterceptor{

	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {
		//编写业务拦截规则
		//从sessin中获取用户的信息
		blogger blogger = (com.yida.bean.blogger) request.getSession().getAttribute("blogger");
		if (blogger==null) {
			response.sendRedirect("/admin");
			return false;
		}
		return true;
	}
	
	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
   System.out.println("controller 执行完了");
	}
	
	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
			throws Exception { System.out.println("我获取到了一个返回的结果:" response);
    System.out.println("请求结束了");
	}
}
 代码说明:
  1. 自定义的拦截器可以实现HandlerInterceptor接口,也可以继承HandlerInterceptorAdapter类。
  2. 重写三个方法,当然也可以只实现一个最重要的preHandle方法。
  3. preHandle方法:此方法会在进入controller之前执行,返回Boolean值决定是否执行后续操作。
  4. postHandle方法:此方法将在controller执行之后执行,但是视图还没有解析,可向ModelAndView中添加数据(前后端不分离的)。
  5. afterCompletion方法:该方法会在整个请求结束(请求结束,但是并未返回结果给客户端)之后执行, 可获取响应数据及异常信息。

3.实现适配器并注册拦截器

代码语言:javascript复制
@Configuration //定义此类为配置类,及相当于之前的xml文件
public class InterceptorConfig implements WebMvcConfigurer{
	//添加我们的拦截器
	 @Override
	public void addInterceptors(InterceptorRegistry registry) {
		// TODO Auto-generated method stub
		 String[] excludePathPatterns = {"/admin","/admin/login"};
		WebMvcConfigurer.super.addInterceptors(registry);
		//已经提供了拦截器注册类 放进来相当于定义了一个bean
		registry.addInterceptor(new UserInterceptor()).addPathPatterns("/admin/**").excludePathPatterns(excludePathPatterns);
	}
	 
}
代码说明:
  1. 需要加上configuration注解说明这是一个配置类,在项目启动的时候自动执行。
  2. 通过实现WebMvcConfigurer接口可以自定义一个适配器,也可以通过继承WebMvcConfigurerAdapter来定义适配器,建议使用第一种,第二种已经是过时的方法了。
  3. 重写addInterceptors方法,addInterceptor方法是将拦截器注入到适配器中。
  4. addPathPatterns方法是设置一个需要拦截的路径,可以是多个字符串或者是直接传入一个数组。
  5. excludePathPatterns是配置不需要拦截的路径。

0 人点赞