iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >SpringBoot通过ThreadLocal怎么实现登录拦截
  • 380
分享到

SpringBoot通过ThreadLocal怎么实现登录拦截

2023-06-30 16:06:38 380人浏览 泡泡鱼
摘要

本篇内容主要讲解“SpringBoot通过ThreadLocal怎么实现登录拦截”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“springBoot通过ThreadLocal怎么实现登录拦截”吧!

本篇内容主要讲解“SpringBoot通过ThreadLocal怎么实现登录拦截”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习springBoot通过ThreadLocal怎么实现登录拦截”吧!

    1 前言

    注册登录可以说是平时开发中最常见的东西了,但是一般进入到公司之后,像这样的功能早就开发完了,除非是新的项目。这两天就碰巧遇到了这样一个需求,完成pc端的注册登录功能。

    实现这样的需求有很多种方式:像

    1)HandlerInterceptor+WEBmvcConfigurer+ThreadLocal

    2)Filter过滤器

    3)安全框架shiro(轻量级框架)

    4)安全框架Spring Securety(重量级框架)

    而我采用的是第一种 Spring HandlerInterceptor+WebMvcConfigurer+ThreadLocal技术来实现。

    2 具体类

    2.1HandlerInterceptor

    HandlerInterceptor是springMVC中为拦截器提供的接口,类似于Servlet开发中的过滤器Filter,用于处理器进行预处理和后处理,需要重写三个方法。

    preHandle:

    调用时间:controller方法处理之前

    执行顺序: 链式Intercepter情况下,Intercepter按照声明顺序一个接一个执行

    若返回false,则中断执行,注意:不会进入afterCompletion

    postHandle:

    调用前提:preHandle返回true

    调用时间:Controller方法处理完之后,DispatcherServlet进行视图渲染之前,也就是说在这个方法中可以对ModelAndView进行操作

    执行顺序:链式Interceptor情况下,Intercepter按照声明顺序执行

    备注:postHandle虽然是post开头,但是post请求,get请求都能处理

    afterCompletion:

    调用前提:preHandle返回true

    调用时间:DispatcherServlet进行视图的渲染之后

    多用于清理资源

    2.2WebMvcConfigurer

    WebMvcConfigurer配置类其实是Spring内部的一种配置方式,采用JavaBean的形式来代替传统的xml配置文件形式进行针对框架个性化定制,可以自定义一些Handler,Interceptor,ViewResolver,MessageConverter。基于java-based方式的spring mvc配置,需要创建一个配置类并实现WebMvcConfigurer接口;

    Spring Boot 1.5版本都是靠重写WebMvcConfigurerAdapter的方法来添加自定义拦截器,消息转换器等。SpringBoot 2.0 后,该类被标记为@Deprecated(弃用)。官方推荐直接实现WebMvcConfigurer或者直接继承WebMvcConfigurationSupport,方式一实现WebMvcConfigurer接口(推荐),方式二继承WebMvcConfigurationSupport类

    3 代码实践

    1)编写拦截器HeadTokenInterceptor使其继承HandlerInterceptor

    package com.liubujun.config;import com.liubujun.moudle.UserToken;import com.liubujun.util.SecurityContextUtil;import lombok.extern.slf4j.Slf4j;import org.springframework.Http.httpstatus;import org.springframework.stereotype.Component;import org.springframework.util.StringUtils;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.xml.ws.handler.Handler;import java.io.IOException;@Component@Slf4jpublic class HeadTokenInterceptor implements HandlerInterceptor {    @Override    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {        String authorization = request.getHeader("Authorization");        if (authorization == null ) {            unauthorized(response);            return false;        }        //这里一般都会解析出userToken的值,这里为了方便就直接new了        UserToken userToken  = new UserToken();        SecurityContextUtil.addUser(userToken);        return false;    }    @Override    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {    }    @Override    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {        SecurityContextUtil.removeUser();    }    private void unauthorized(HttpServletResponse response) {        response.setStatus(HttpStatus.UNAUTHORIZED.value());        try {            response.getWriter().append(HttpStatus.UNAUTHORIZED.getReasonPhrase());        } catch (IOException e) {            log.error("HttpServletResponse writer error.msg",HttpStatus.UNAUTHORIZED.getReasonPhrase());            log.error(e.getMessage(),e);        }    }}

    2)编写MyWebMvcConfigurer使其继承WebMvcConfigurationSupport

    package com.liubujun.config;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.WebMvcConfigurationSupport;import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;import java.util.ArrayList;@Configurationpublic class MyWebMvcConfigurer extends WebMvcConfigurationSupport {    @Autowired    private HeadTokenInterceptor headTokenInterceptor;        @Override    public void addInterceptors(InterceptorRegistry registry) {        ArrayList<String> pattres = new ArrayList<>();        pattres.add("/login/login");        registry.addInterceptor(headTokenInterceptor).excludePathPatterns(pattres).addPathPatterns("    @Override    public void addResourceHandlers(ResourceHandlerRegistry registry) {        registry.addResourceHandler("xxx.html")                .addResourceLocations("classpath:/META-INF/resources");        super.addResourceHandlers(registry);    }}

    3)编写ThreadLocal类存放用户信息

    package com.liubujun.util;import com.liubujun.moudle.UserToken;import org.springframework.core.NamedThreadLocal;public class SecurityContextUtil {    private static ThreadLocal<UserToken> threadLocal = new NamedThreadLocal<>("user");    public static void addUser(UserToken user){        threadLocal.set(user);    }    public static UserToken getUser(){        return threadLocal.get();    }    public static void removeUser(){        threadLocal.remove();    }    public static String getPhoneNumber(){        return threadLocal.get().getPhoneNumber();    }    public static Integer getId(){        return threadLocal.get().getId();    }    public static String getUserText(){        return threadLocal.get().getUserText();    }}

    4)编写测试controller

    @RestController@RequestMapping(value = "/login",produces = {"application/JSON;charset=UTF-8"})public class Login {    @PostMapping("/login")    public String login(){        return "登录请求不需要拦截";    }    @PostMapping("/other")    public String other(){        return "其他的请求需要拦截";    }}

    5)测试

    测试login接口,(不传token直接放行)

    SpringBoot通过ThreadLocal怎么实现登录拦截

    测试其他接口,不传token被拦截到

    SpringBoot通过ThreadLocal怎么实现登录拦截

    到此,相信大家对“SpringBoot通过ThreadLocal怎么实现登录拦截”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

    --结束END--

    本文标题: SpringBoot通过ThreadLocal怎么实现登录拦截

    本文链接: https://www.lsjlt.com/news/330213.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • SpringBoot通过ThreadLocal怎么实现登录拦截
      本篇内容主要讲解“SpringBoot通过ThreadLocal怎么实现登录拦截”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringBoot通过ThreadLocal怎么实现登录拦截”吧!...
      99+
      2023-06-30
    • SpringBoot通过ThreadLocal实现登录拦截详解流程
      目录1 前言2 具体类2.1HandlerInterceptor2.2WebMvcConfigurer3 代码实践1 前言 注册登录可以说是平时开发中最常见的东西了,但是一般进入到公...
      99+
      2024-04-02
    • 如何使用SpringBoot拦截器实现登录拦截
      小编给大家分享一下如何使用SpringBoot拦截器实现登录拦截,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!可以对URL路径进行拦截,可以用于权限验证、解决乱码...
      99+
      2023-06-29
    • SpringBoot如何实现登录拦截器
      这篇文章主要介绍“SpringBoot如何实现登录拦截器”,在日常操作中,相信很多人在SpringBoot如何实现登录拦截器问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”SpringBoot如何实现登录拦截器...
      99+
      2023-07-02
    • SpringBoot拦截器实现登录拦截的示例代码
      可以对URL路径进行拦截,可以用于权限验证、解决乱码、操作日志记录、性能监控、异常处理等  实现代码 新建 interceptor包 添加拦截器代码 package c...
      99+
      2024-04-02
    • node.js怎么实现登录拦截器
      本文小编为大家详细介绍“node.js怎么实现登录拦截器”,内容详细,步骤清晰,细节处理妥当,希望这篇“node.js怎么实现登录拦截器”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。首先我们实现一个过滤器expo...
      99+
      2023-07-04
    • SpringBoot登录验证token拦截器的实现
      目录注解定义token生成与验证拦截器定义拦截器配置定义拦截器的方法执行类注解使用返回值-全局异常类定义各种测试不传token制造可行的假token伪造token测试拓展:从请求中获...
      99+
      2024-04-02
    • SpringBoot登录验证token拦截器如何实现
      这篇文章主要讲解了“SpringBoot登录验证token拦截器如何实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringBoot登录验证token拦截器如何实现”吧!用户访问接口验...
      99+
      2023-07-02
    • SpringBoot实现登录拦截器的方法详解
      在项目目录下建立两个包:inter 与contsfig 在inter新建层中实现HandlerInterceptor的继承类 package com.example.gamebo...
      99+
      2024-04-02
    • vue路由实现登录拦截
      目录一、概述二、路由导航守卫实现登录拦截一、概述 在项目开发中每一次路由的切换或者页面的刷新都需要判断用户是否已经登录,前端可以判断,后端也会进行判断的,我们前端最好也进行判断。 ...
      99+
      2024-04-02
    • java 使用过滤器实现登录拦截处理
      目录滤器实现登录拦截处理一、什么是过滤器二、工作原理及生命周期三、过滤器使用filter简易实现登录功能拦截LoginFlitercontroller结果图滤器实现登录拦截处理 一、...
      99+
      2024-04-02
    • SpringBoot实现登录拦截器超详细教程分享
      目录SpringBoot实现登录拦截器SpringBoot 实现登录拦截的原理springboot拦截器excludePathPatterns方法不生效的坑与解决方法问题解决方法总结...
      99+
      2023-02-16
      SpringBoot实现登录拦截器 SpringBoot登录拦截器 SpringBoot登录拦截
    • 怎么使用vue和axios实现登录拦截
      本篇内容主要讲解“怎么使用vue和axios实现登录拦截”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用vue和axios实现登录拦截”吧!该项目是利用了Github 提供的persona...
      99+
      2023-07-04
    • SpringBoot登录用户权限拦截器的实现方法
      这篇文章主要介绍了SpringBoot登录用户权限拦截器的实现方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 创建自定义拦截器类并实现 HandlerIntercepto...
      99+
      2023-06-14
    • vue+axios如何实现登录拦截
      这篇文章给大家分享的是有关vue+axios如何实现登录拦截的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。该项目是利用了Github 提供的personal token作为登录t...
      99+
      2024-04-02
    • vue如何实现http登录拦截
      今天小编给大家分享一下vue如何实现http登录拦截的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。路由文件export&nb...
      99+
      2023-07-04
    • Express+Nodejs中如何实现登录拦截
      这篇文章给大家分享的是有关Express+Nodejs中如何实现登录拦截的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。原来一直不知道怎么在Express+Nodejs里面添加类似...
      99+
      2024-04-02
    • SpringBoot配置拦截器实现过程详解
      目录如何配置拦截器拦截器设置容易出现的问题如何取消拦截操作实例-登录验证如何配置拦截器 step1: 自定义拦截器 public class MyInterceptor imple...
      99+
      2022-11-13
      SpringBoot配置拦截器 SpringBoot拦截器
    • 基于SpringMVC实现网页登录拦截
      目录1.简介2.自定义拦截器3. 登录拦截3.1 先做一个页面3.2 登录拦截1.简介 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进...
      99+
      2024-04-02
    • 怎么在Springboot实现拦截器功能
      本篇内容介绍了“怎么在Springboot实现拦截器功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!preHandle: 预先处...
      99+
      2023-07-02
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作