一,pom.xml的配置

这里很简单,先引入spring-boot-starter-parent,parent 是父模块,由父模块统一进行 spring-boot 版本管理,dependencies 中与 spring-boot 启动绑定的包不需要再指定版本。

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.3.RELEASE</version>
</parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
</dependencies>

二,新建WebConfigurer

1,如图,新建的 config 包,用来装初始化文件,在配置之下新建 WebConfigurer。

2,WebConfigurer需要实现 WebMvcConfigurer 这个接口,并实现里面的两个方法。(在老版本的 spring-boot 中使用的是WebMvcConfigurerAdapter,新版本中已过时!!!还有不能通过继承 WebMvcConfigurationSupport 这个类来实现,这样会在某些情况下失效!!!),第二个 addInterceptors 方法用来注册添加拦截器。

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration
public class WebConfigurer implements WebMvcConfigurer {// 这个方法是用来配置静态资源的,比如html,js,css,等等@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {}// 这个方法用来注册拦截器,我们自己写好的拦截器需要通过这里添加注册才能生效@Overridepublic void addInterceptors(InterceptorRegistry registry) {}
}

三,新建登陆拦截器

如下图所示,在 config 包下新建一个 intercepors 包,用来装拦截器。然后在拦截器下新建 LoginInterceptor,用来拦截验证登陆。

2,每一个拦截器有需要实现的 HandlerInterceptor 接口,这个接口有三个方法,每个方法会在请求调用的不同时期完成,因为我们需要在接口调用之前拦截请求判断是否登陆,所以这里需要使用 preHandle 方法,在里面写验证逻辑,最后返回 true 或者 false,确定请求是否合法。记住加 @Component 注解,我们需要在上一步的 WebConfigurer 类中注入。用户是自定义的用户类,大家可以自己定义,我这里就不贴出来了。

import com.impte.study.domain.po.User;
import org.springframework.lang.Nullable;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;@Component
public class LoginInterceptor implements HandlerInterceptor {//这个方法是在访问接口之前执行的,我们只需要在这里写验证登陆状态的业务逻辑,就可以在用户调用指定接口之前验证登陆状态了public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//每一个项目对于登陆的实现逻辑都有所区别,我这里使用最简单的Session提取User来验证登陆。HttpSession session = request.getSession();//这里的User是登陆时放入session的User user = (User) session.getAttribute("user");//如果session中没有user,表示没登陆if (user == null){//这个方法返回false表示忽略当前请求,如果一个用户调用了需要登陆才能使用的接口,如果他没有登陆这里会直接忽略掉//当然你可以利用response给用户返回一些提示信息,告诉他没登陆return false;}else {return true;    //如果session里有user,表示该用户已经登陆,放行,用户即可继续调用自己需要的接口}}public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {}public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {}
}

四,在WebConfigurer中添加拦截器

1,首先将 LoginInterceptor 注入到 WebConfigurer 中。

    @Autowiredprivate LoginInterceptor loginInterceptor;

2,然后在 WebConfigurer 中的 addInterceptors 中添加拦截器,使其生效。

    @Overridepublic void addInterceptors(InterceptorRegistry registry) {// addPathPatterns("/**") 表示拦截所有的请求,// excludePathPatterns("/login", "/register") 表示除了登陆与注册之外,因为登陆注册不需要登陆也可以访问registry.addInterceptor(loginInterceptor).addPathPatterns("/**").excludePathPatterns("/login", "/register");super.addInterceptors(registry);    //较新Spring Boot的版本中这里可以直接去掉,否则会报错}

3,addPathPatterns 用来设置拦截路径,excludePathPatterns 用来设置白名单,也就是不需要触发这个拦截器的路径。

完整代码:

import com.impte.study.config.interceptors.LoginInterceptor;
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.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration
public class WebConfigurer implements WebMvcConfigurer {@Autowiredprivate LoginInterceptor loginInterceptor;// 这个方法是用来配置静态资源的,比如html,js,css,等等@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {}// 这个方法用来注册拦截器,我们自己写好的拦截器需要通过这里添加注册才能生效@Overridepublic void addInterceptors(InterceptorRegistry registry) {// addPathPatterns("/**") 表示拦截所有的请求,// excludePathPatterns("/login", "/register") 表示除了登陆与注册之外,因为登陆注册不需要登陆也可以访问registry.addInterceptor(loginInterceptor).addPathPatterns("/**").excludePathPatterns("/login", "/register");}
}

五,总结

我在这里只是用登陆的例子来展现来展现拦截器的基本使用,拦截器用途很广,比如可以用来进行接口权限控制。如果我的文章对你有帮助,请关注一波,CSDN新人驾到,还望各路大神多多照顾!

Spring Boot拦截器配置拦截登陆相关推荐

  1. Spring boot自定义拦截器和拦截器重定向配置简单介绍~!

    大家好: 本文简单介绍一下用于权限控制的Spring boot拦截器配置,拦截器重定向问题. 开发工具:jdk1.8   idea2017(付费版,网上找的破解教程) 1,首先使用idea创建一个Sp ...

  2. Spring Boot——自定义多个拦截器(HandlerInterceptor)配置方法与执行顺序

    执行顺序 源代码 拦截器类 package com.jd.m.tg.interceptor;import org.slf4j.Logger; import org.slf4j.LoggerFactor ...

  3. Spring Boot细节挖掘(拦截器)

    拦截器的原理很简单,是 AOP 的一种实现,专门拦截对动态资源的后台请求,即拦截对控制层的请求.常见的使用场景包括判断用户是否有权限请求后台,再拔高一层的使用场景,比如拦截器可以结合 WebSocke ...

  4. springboot拦截html页面元素,Spring Boot 中如何使用拦截器(十五)

    关于拦截器,大家一定都不陌生,spring boot 中是如何使用拦截器的呢?今天就举个例子,来给大家说明一下,废话不多说,开始撸代码!!! 1.创建一个新的spring boot项目,并引入相应的j ...

  5. Spring Boot项目设置权限拦截器和过滤器

    参考博文:https://blog.csdn.net/qq_30745307/article/details/80974407 目录 过滤器 Filter 作用 生命周期 示例代码 拦截器 Inter ...

  6. Spring拦截器配置详解(如何定义一个拦截器)

    一.前言 Spring和SpringBoot的拦截器也是对请求进行的系列验证或处理,关于拦截器和过滤器的区别此文不做介绍,之前我看到过一篇相关系列的文章,讲述的还比较详细,给大家参考参考:拦截器与过滤 ...

  7. Spring Boot 系列:过滤器+拦截器+监听器

    原 Swagger 文章合并到 Spring Boot 系列:配置 Swagger2 一.过滤器 - Filter 过滤器是处于客户端和服务器资源文件之间的一道过滤网,帮助我们过滤掉一些不符合要求的请 ...

  8. springboot 添加拦截器之后中文乱码_spring boot 2.x 添加拦截器配置未生效的问题

    背景: 今天有一个需求需要拦截除登录相关请求以外的所有请求,并查看request 中是否包含指定的信息,而自然就想到了使用拦截器就可以轻松实现 编写拦截器,获取请求头信息中的test,并打印出来 @C ...

  9. Spring mvc 拦截器 配置心得

    session超过时间自动跳转到登录页面.要求请求的每个url都要进行拦截,当然,js,css这些东西除外. spring-mvc.xml Xml代码   <!-- 拦截器配置 --> & ...

  10. SpringBoot拦截器配置

    SpringBoot拦截器配置 自定义拦截器: com.example.mybatis2018.interceptor.MyInterCeptor package com.example.mybati ...

最新文章

  1. Ubuntu16.04桌面系统如何配置和启动wireshark
  2. springmvc-配置文件
  3. 17行代码AC——习题5-3 卡片游戏(Throwing cards away I, UVa 10935,约瑟夫环)_解题报告
  4. Xmanager – Passive oracle 安装调用图形界面
  5. Java / Cloud:如何快速创建支持Kubernetes的REST微服务
  6. 全国省份、城市、地区全数据(SQL版与XML版)包括各城市邮编
  7. 转载 lemontrees(lemontree) 的计算机系考研攻略 (游戏版)
  8. 聊聊 Python 的单元测试框架(一):unittest
  9. Java中的BlockingQueue队列
  10. 7 CSS字体样式属性
  11. 计算机网络 第七版-第七版第八章软件工程(含答案)
  12. 快速拥有自己的博客,语雀或许是不错的选择
  13. TestNg测试框架
  14. 如何取消文件关联,恢复文件默认的图标,最简单的办法!!!!!
  15. 微信支付分(三)--完结支付分订单
  16. 2022年国家高新企业认定申报最全问答-财务数据篇
  17. Altium Designer中的电路仿真
  18. 2022 Q2 GO开发者问卷调查结果
  19. 论文阅读 Solving Mixed Integer Programs Using Neural Networks
  20. AppRTC服务器搭建

热门文章

  1. SAP中检查货币代码
  2. win7卡在正在启动windows界面_电脑在“windows正在启动” 画面停留的时间长如何办...
  3. 后台管理系统PRD该怎么写?
  4. 附合导线坐标计算例题_附合导线计算方法(实例)
  5. 37 个 Python Web 开发框架总结
  6. cad计算机绘图实操视频,cad工程制图教程视频
  7. python ppt表格样式展示
  8. Java中的sql语句代码拼接问题
  9. JVM之类的加载与类加载器
  10. iertutil.dll文件缺失/ 修复方法