尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

【SpringBoot】深度解析 Spring Boot 拦截器:实现统一功能处理的关键路径

【SpringBoot】深度解析 Spring Boot 拦截器:实现统一功能处理的关键路径 前言**???本期讲解关于拦截器的详细介绍~~~??感兴趣的小伙伴看一看小编主页-CSDN博客?? 你的点赞就是小编不断更新的最大动力****??那么废话不多说直接开整吧~~**目录???1.拦截器??1.1拦截器快速入门1.?定义拦截器2.配置拦截器??1.2拦截器的详解1.拦截路径2.拦截器执行流程??1.3登录校验1.定义拦截器2.配置拦截器???2.总结### **??**1.拦截器强制登录的功能, 后端程序根据Session来判断是否登录, 但是实现法是较烦的 需要修改每个接的处理逻辑 需要修改每个接的返回结果 接定义修改, 前端代码也需要跟着修改即我们不需要一个一个请求的后端代码进行修改直接在每个请求之前进行拦截判断这里的界面是否是用户进行了登录#### ??1.1拦截器快速入门什么是拦截器拦截器是Spring框架提供的核功能之, 主要来拦截的请求, 在指定法前后, 根据业务需要执预先设定的代码. 也就是说, 允许开发员提前预定义些逻辑, 在的请求响应前后执. 也可以在请求前阻其执.在拦截器当中开发员可以在应程序中做些通性的操作, 如通过拦截器来拦截前端发来的请求, 判断Session中是否有登录的信息. 如果有就可以放, 如果没有就进拦截大致的流程图如下拦截器的大致使用就是一下两步 1.定义拦截器 2.配置拦截器大概的意思就是首先一个学校的大门的保安首先要招聘在招聘到保安人员后然后再安排这个保安去哪里进行看守那么招聘就是定义拦截去安排哪里进行看守就是配置拦截器##### 1.定义拦截器自定义拦截器就是实现HandlerInterceptor接并重写其所有法那么具体的代码就是如下所示的 Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { log.info(“LoginInterceptor ?标?法执?前执?..”); return true } Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { log.info(“LoginInterceptor ?标?法执?后执?..”); }**解释preHandle()法标法执前执. 返回true: 继续执后续操作; 返回false: 中断后续操作. postHandle()法标法执后执 afterCompletion()法视图渲染完毕后执最后执(后端开发现在乎不涉及视图, 暂不了 解)这里小编没有重写这里的afterCompletion()方法~~这段代码就是说明了这两个拦截器一个在请求执行前进行一个请求后再次执行设置为true就表示要执行不拦截进行放行反之就是不执行##### 2.配置拦截器我们在定义好拦截器后那么此时就应该进行安排这个拦截器在哪里工作了此时就涉及拦截器的配置实现WebMvcConfigurer接并重写addInterceptors法具体的代码如下所示 Configuration public class WebConfig implements WebMvcConfigurer { //注入拦截器 Autowired private LoginInterceptor loginInterceptor; Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(loginInterceptor) .addPathPatterns(/“); } }**解释**这里的大致意思就是安排拦截器到所有请求之前“/**”代表的路劲就是所有的请求然后再通过Autowired引进这里的拦截器对象致此我们就完成了只有打印工作的拦截器此时运行后控制面板的日志的打印如下所示**注意请求请求肯定是要进行请求后才会出现这里的日志信息别忘了在日志观察前进行请求的发送#### ??1.2拦截器的详解拦截器的程序完成之后接下来我们来介绍拦截器的使细节。拦截器的使细节我们主要介绍拦截器的拦截路径配置##### 1.拦截路径拦截路径是指我们定义的这个拦截器, 对哪些请求效.我们在注册配置拦截器的时候, 通过 addPathPatterns() 法指定要拦截哪些请求. 也可以通过excludePathPatterns() 指定不拦截哪些请求. 如登录校验, 我们希望可以对除了登录之外所有的路径效代码如下所示 Configuration public class WebConfig implements WebMvcConfigurer { //注入拦截器 Autowired private LoginInterceptor loginInterceptor; Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(loginInterceptor) .addPathPatterns(/”) .excludePathPatterns(“/user/login”) ; } }**解释**addPathPatterns这里就是指定要拦截的请求.excludePathPatterns这里就是指定不必进行拦截的请求我们要进进行登录那么这里肯定是不可以进行拦截的常见的路径的拦截注意在书写这里的路径的时候这里的/book/**第一个这里的正斜杠是不一可以进行省略的不要问为啥因为这里小编所犯的错误##### 2.拦截器执行流程正常的情况下我们的执行流程就是如下所示有了拦截器之后会在调 Controller 之前进相应的业务处理执的流程如下图解释1.添加拦截器后, 执Controller的法之前, 请求会先被拦截器拦截住. 执 preHandle() 法 这个法需要返回个布尔类型的值. 如果返回true, 就表放本次操作, 继续访问controller中的 法. 如果返回false则不会放(controller中的法也不会执).2. controller当中的法执完毕后再回过来执 postHandle() 这个法以及afterCompletion() 法执完毕之后最终给浏览器响应数据#### ??1.3登录校验##### 1.定义拦截器从session中获取信息, 如果session中不存在, 则返回false,并设置http状态码为401, 否则返回true.代码如下所示 public class LoginInterceptor implements HandlerInterceptor { //定义拦截器,重写方法 Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { HttpSession session request.getSession(); UserInfo userInfo (UserInfo) session.getAttribute(constant.USER_SESSION_KEY); if (userInfonull || userInfo.getId()0){ //用户未登录 response.setStatus(401); return false; } return true; } }解释我们这里拿到session后进行判断通过这里的key拿到对应的值通过对象来接收后判断这里的对象是否为空或者这里的id的值是否小于0若满足条件那么设置状态码401然后进行拦截##### 2.配置拦截器 Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(loginInterceptor) .addPathPatterns(/“) .excludePathPatterns(”/user/login) .excludePathPatterns(/css/“) .excludePathPatterns(”/js/“) .excludePathPatterns(”/pic/“) .excludePathPatterns(”//.html) ; }**解释**这里设置所有的后端请求都包括这里的拦截器但是我们的目的就是跳转至登录页面所以这里的请求不必拦截以及静态的前端请求不必拦截最后在前端的代码添加如下所示 error: function (error) { if (error ! null error.status 401) { location.href “login.html”; } }**解释*当接收到401状态码后重新定义error方法直接进行页面的跳转就完成了页面强制登录的操作了这里我们响应中设置了状态码所以这里直接取到状态码###??2.总结本期小编主要总结了在SpringBoot中统一功能处理的拦截器功能从简单了解实现方法定义到配置到如何运用到我们的图书管理系统代码里都做了解释~~???~~~~最后希望与诸君共勉共同进步*???以上就是本期内容了 感兴趣的话就关注小编吧。???期待你的关注~~~
返回列表