前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Springboot之拦截器

Springboot之拦截器

作者头像
用户10521079
发布2023-05-04 18:00:44
3080
发布2023-05-04 18:00:44
举报
文章被收录于专栏:Smile博客Smile博客

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是配置不需要拦截的路径。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 拦截器介绍
  • 2.自定义拦截器
  • 3.实现适配器并注册拦截器
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档