Spring Boot拦截器配置拦截登陆「建议收藏」

Spring Boot拦截器配置拦截登陆「建议收藏」一,pom.xml的配置这里很简单,先引入spring-boot-starter-parent,parent是父模块,由父模块统一进行spring-boot版本管理,dependencies中与spring-boot启动绑定的包不需要再指定版本。<parent><groupId>org.springframework.boot<…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

一,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。

Spring Boot拦截器配置拦截登陆「建议收藏」

    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,等等
  @Override
  public void addResourceHandlers(ResourceHandlerRegistry registry) {
  }

  // 这个方法用来注册拦截器,我们自己写好的拦截器需要通过这里添加注册才能生效
  @Override
  public void addInterceptors(InterceptorRegistry registry) {
  }
}

 

三,新建登陆拦截器

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

Spring Boot拦截器配置拦截登陆「建议收藏」

    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 中。

    @Autowired
    private LoginInterceptor loginInterceptor;

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

    @Override
    public 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 {

  @Autowired
  private LoginInterceptor loginInterceptor;

  // 这个方法是用来配置静态资源的,比如html,js,css,等等
  @Override
  public void addResourceHandlers(ResourceHandlerRegistry registry) {
  }

  // 这个方法用来注册拦截器,我们自己写好的拦截器需要通过这里添加注册才能生效
  @Override
  public void addInterceptors(InterceptorRegistry registry) {
    // addPathPatterns("/**") 表示拦截所有的请求,
    // excludePathPatterns("/login", "/register") 表示除了登陆与注册之外,因为登陆注册不需要登陆也可以访问
    registry.addInterceptor(loginInterceptor).addPathPatterns("/**").excludePathPatterns("/login", "/register");
  }
}

五,总结

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/160954.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(1)
blank

相关推荐

  • eclipse设置中没有server选项[通俗易懂]

    用eclipse准备配置tomcat,发现配置中没有server选项,参考各种解决方法之后成功解决。准备工作:1.查看eclipse版本号;在eclipse中点Help,现在AboutEclipseIDE;2.添加server插件;eclipse中点Help,选择InstallNewSoftware…;点Add,Name输入上面查询的eclipse版本号,Location…

  • pycharm 中切换虚拟环境的总结

    pycharm 中切换虚拟环境的总结一、理清思路太重要了1、首先了解对应虚拟环境的运行机制你才能找到正确的解决方案2、分享我个人遇到的问题及解决方案首先安装好了django框架后,在cmd里面能正常运行,但是在Pycharm里面总是不能运行成功,老是报没有激活的问题。首先我们来看在cmd中成功运行的界面:在cmd里面我们切换至对应工程的路径输入命令:pythonmanage.pyrunserver127.0.0.1:8888,我们可以看到Startingdevelopmentserverathttp://127.0

  • vscode引入vue_vscode配置vue开发环境

    vscode引入vue_vscode配置vue开发环境vs导入vue项目renren-fast-vue使用

  • pycharm怎么装第三方库jieba_pycharm找不到第三方库

    pycharm怎么装第三方库jieba_pycharm找不到第三方库第一种想要安装什么库,就直接cmd打开pipinstall库,这种方法可以的,不过速度会有点慢不过,有时候失败就难受。第二种直接在pycharm中安装如图,不过安装失败的情况比较多(可能是我电脑问题)第三种下载了Anaconda的小伙伴,虽然conda里面含有很多库了,但是还有需要下载的就可以直接打开AnacondaNavigator,在里面进行操作,如图四、上面三种都不行有安装Anaconda的话,直接上网搜索库名加pypi..

  • pycharm不支持32位系统怎么办_pycharm不支持32位系统吗

    pycharm不支持32位系统怎么办_pycharm不支持32位系统吗在32位操作系统中安装pycharm过程中发现的一些问题首先是下载了最新版本的pycharm安装后打开,弹出未发现可执行的文件,然后想到了其他的办法1、下载最新版本的pycharm不能直接运行,因此可以下载之前版本的pycharm,这里选择了2017.3版本的window版本下载并安装到自定义的目录,需要注意的是在安装的过程中,有一项需要勾选,添加到桌面32位安装好之后,双…

  • java getclass_Java–getClass()和.Class的区别

    java getclass_Java–getClass()和.Class的区别在程序运行时期动态获得对象类型信息的操作,对比传统编程和反射的区别。传统编程:在编译阶段决定使用的类型反射:动态获得类型每个类都会产生一个对应的Class对象,也就是保存在.class文件。所有类都是在对其第一次使用时,动态加载到JVM的,当程序创建一个对类的静态成员的引用时,就会加载这个类。Class对象仅在需要的时候才会加载。类加载器首先会检查这个类的Class对象是否已被加载过,如果尚未加载…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号