当前位置: 首页 > news >正文

SpringSecurity 实现token 认证

  • 配置类

    @Configuration
    @EnableWebSecurity
    @EnableGlobalMethodSecurity(prePostEnabled=true)
    public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {

    @Bean
    @Override
    public AuthenticationManager authenticationManagerBean() throws Exception {return super.authenticationManagerBean();
    }// 由于过滤器 比 servelt 先加载 在这里注入一下 负责  TokenAuthenticationTokenFilter 中redisuntity 
    @Bean
    public TokenAuthenticationTokenFilter getTokenFiter(){return new TokenAuthenticationTokenFilter();
    }
    @Override
    protected void configure(HttpSecurity http) throws Exception {//http.addFilterBefore(new VerCodeFi    lter("/Login/Login"), UsernamePasswordAuthenticationFilter.class);http.addFilterBefore(getTokenFiter(), UsernamePasswordAuthenticationFilter.class);http.authorizeRequests().antMatchers("/Login/**").permitAll() // 放行Login.anyRequest().authenticated() // 所有请求都需要验证.and().formLogin() // 使用默认的登录页面.and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and().csrf().disable();// post请求要关闭csrf验证,不然访问报错;实际开发中开启,需要前端配合传递其他参数
    }
    

    }

  • 定义token 验证过滤器

    public class TokenAuthenticationTokenFilter extends OncePerRequestFilter {

    @Autowired
    private RedisUtils redisUtils;public TokenAuthenticationTokenFilter(){
    }@Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {//1、获取请求头携带的tokenString token = request.getHeader("token");if(!StringUtils.hasText(token)){//不需要token的路由可以直接放行filterChain.doFilter(request,response);return;}Object o =redisUtils.get(token);if (o==null){response.setStatus(200);response.setCharacterEncoding("utf-8");response.getWriter().write(JSON.toJSONString(Result.failed(401,"token 非法","")));return;}Map<String,String> maps=new HashMap<>();Map Values = JSON.parseObject(o.toString(), maps.getClass());Collection<GrantedAuthority> authorities = new ArrayList<>();authorities.add(new SimpleGrantedAuthority(Values.get("role").toString()));UsernamePasswordAuthenticationToken authenticationToken=new UsernamePasswordAuthenticationToken(new Userdto(), null, authorities);SecurityContextHolder.getContext().setAuthentication(authenticationToken);filterChain.doFilter(request,response); //放行
    }
    

    }

相关文章:

SpringSecurity 实现token 认证

配置类 Configuration EnableWebSecurity EnableGlobalMethodSecurity(prePostEnabledtrue) public class SpringSecurityConfig extends WebSecurityConfigurerAdapter { Bean Override public AuthenticationManager authenticationManagerBean() throws Exception {return s…...

轻松实现语音生成:GPT-SoVITS V2整合包的远程访问操作详解

文章目录 前言1.GPT-SoVITS V2下载2.本地运行GPT-SoVITS V23.简单使用演示4.安装内网穿透工具4.1 创建远程连接公网地址 5. 固定远程访问公网地址 前言 今天要给大家安利一个绝对能让你大呼过瘾的声音黑科技——GPT-SoVITS&#xff01;这款由花儿不哭大佬精心打造的语音克隆神…...

解锁状态模式:Java 编程中的行为魔法

系列文章目录 后续补充~~~ 文章目录 一、状态模式&#xff1a;概念与原理二、状态模式的深度剖析&#xff08;一&#xff09;模式定义与核心思想&#xff08;二&#xff09;模式结构与角色 三、状态模式的实际应用场景&#xff08;一&#xff09;电商系统中的订单状态管理&…...

算法与数据结构(相交链表)

题目 思路 1.哈希集合 因为要求是否存在相交节点&#xff0c;那么我们就可以利用哈希集合先将listA链表里面的所有数据存入&#xff0c;然后访问listB&#xff0c;判断其是否有节点在哈希集合中&#xff0c;若存在&#xff0c;则说明此节点为相交的节点。若遍历完之后仍没有发…...

浅入浅出Selenium DevTools

前言 在自动化测试领域&#xff0c;Selenium一直是主流工具之一。随着前端技术的不断发展&#xff0c;浏览器的功能也在不断丰富。 Selenium 3版本前&#xff0c;一套通用的采集流程如上图所示&#xff1a; 打开Charles&#xff0c;设置Session自动导出频次及导出路径Seleniu…...

软件工程---净室软件工程

净室软件工程是一种软件开发方法&#xff0c;旨在通过形式化的数据和严格的测试来提高软件的可靠性和减少缺陷的数量。它的核心思想是在软件开发过程中最小化或消除软件缺陷&#xff0c;从而提高软件的质量和可靠性。这种方法强调在软件生命周期的早期阶段使用形式化方法进行规…...

OpenHarmony图形子系统

OpenHarmony图形子系统 图形子系统主要包括UI组件、布局、动画、字体、输入事件、窗口管理、渲染绘制等模块&#xff0c;构建基于轻量OS应用框架满足硬件资源较小的物联网设备或者构建基于标准OS的应用框架满足富设备的OpenHarmony系统应用开发。 1.1 轻量系统 简介 图形子…...

如何获取Mac OS 安装盘

发现虚拟机VirtualBox支持Mac虚拟&#xff0c;就想尝试一下。但是发现Mac的安装盘特别难拿到&#xff0c;因此留档。发现有几种方法&#xff0c;最简单的方法&#xff0c;是在有Mac 机器的情况下&#xff0c;直接到App Store里&#xff0c;根据Mac版本的名字查找并下载。另外还…...

【弹性计算】弹性裸金属服务器和神龙虚拟化(一):功能特点

弹性裸金属服务器和神龙虚拟化&#xff08;一&#xff09;&#xff1a;功能特点 特征一&#xff1a;分钟级交付特征二&#xff1a;兼容 VPC、SLB、RDS 等云平台全业务特征三&#xff1a;兼容虚拟机镜像特征四&#xff1a;云盘启动和数据云盘动态热插拔特征五&#xff1a;虚拟机…...

大白话前端性能优化方法的分类与具体实现

大白话前端性能优化方法的分类与具体实现 一、资源加载优化 1. 压缩与合并文件 大白话解释&#xff1a; 咱们的网页代码里&#xff0c;就像一个房间堆满了东西&#xff0c;有很多没用的“杂物”&#xff0c;比如代码里的空格、注释啥的。压缩文件就是把这些“杂物”清理掉&a…...

Rabbit MQ 高频面试题【刷题系列】

文章目录 一、公司生产环境用的什么消息中间件&#xff1f;二、Kafka、ActiveMQ、RabbitMQ、RocketMQ有什么优缺点&#xff1f;三、解耦、异步、削峰是什么&#xff1f;四、消息队列有什么缺点&#xff1f;五、RabbitMQ一般用在什么场景&#xff1f;六、简单说RabbitMQ有哪些角…...

ES6 特性全面解析与应用实践

1、let let 关键字用来声明变量&#xff0c;使用let 声明的变量有几个特点&#xff1a; 1) 不允许重复声明 2) 块儿级作用域 3) 不存在变量提升 4) 不影响作用域链 5) 暂时性死区 6&#xff09;不与顶级对象挂钩 在代码块内&#xff0c;使用let命令声明变量之前&#x…...

有关数据库表的冗余字段

有关数据库表的冗余字段 之前看一个开发人员的技术研讨视频&#xff0c;提到了一个数据库表设计中的表拆分字段冗余问题&#xff0c;就是一张表做纵向分表&#xff0c;拆分为a和b以做冷热数据分离存储&#xff0c;但是会有一种情况就是相同的字段值在a&#xff0c;b表中重复出现…...

知识图谱补全KGC

目录 基础知识知识图谱补全概念性能指标 一、翻译模型的知识图谱补全1.TransE2.TransH3.RotatE 二、张量分解的知识补全1.RESCAL2.ComplEx 三、神经网络的知识图谱补全1.卷积神经网络CNN&#xff08;一般用于二维图像处理&#xff09;ConvE 2.循环神经网络RNN3.图神经网络GNN1&…...

独立开发者的内容营销教程

内容营销对于独立开发者来说&#xff0c;是一种低成本、高效的方式来推广产品、建立品牌影响力和吸引潜在用户。通过分享有价值、相关性强的内容&#xff0c;您可以吸引用户的注意力&#xff0c;增强用户黏性&#xff0c;并最终将他们转化为忠实用户或客户。以下是详细的独立开…...

Mysql——约束与多表查询

一、约束 1.1定义 约束是对表中的数据进行限制的一套规则&#xff0c;用于防止用户向数据库中输入无效数据。它可以保证表中的数据满足特定业务规则和逻辑&#xff0c;从而维护数据的准确性和可靠性。 1.2作用 数据完整性 &#xff1a;约束可以确保数据在插入、更新或删除时符…...

DockerでOracle Database 23ai FreeをセットアップしMAX_STRING_SIZEを拡張する手順

DockerでOracle Database 23c FreeをセットアップしMAX_STRING_SIZEを拡張する手順 はじめに環境準備ディレクトリ作成Dockerコンテナ起動 データベース設定変更コンテナ内でSQL*Plus起動PDB操作と文字列サイズ拡張設定検証 管理者ユーザー作成注意事項まとめ はじめに Oracle…...

Unity 运用正则表达式保留字符串中的中文英文字母和数字

正则表达 正则表达式 – 语法 | 菜鸟教程 Regex 类 (System.Text.RegularExpressions) | Microsoft Learn 保留字符串中的中英数 中英数的正则表达。 patten "[\u4e00-\u9fa5A-Za-z0-9]"; 使用Regex 类匹配正则并保留。 matches Regex.Matches(str, patten)…...

vue el-table-column 单元表格的 省略号 实现

要对 el-table-column 的某一列中的每个单元格值进行处理&#xff0c;使其在文本内容超出指定宽度时显示省略号&#xff08;…&#xff09;&#xff0c;可以通过以下方法实现&#xff1a; 使用 scoped slots&#xff1a;利用 Element UI 提供的 scoped slots 自定义单元格内容…...

企业微信里可以使用的企业内刊制作工具,FLBOOK

如何让员工及时了解公司动态、行业资讯、学习专业知识&#xff0c;并有效沉淀企业文化&#xff1f;一份高质量的企业内刊是不可或缺的。现在让我来教你该怎么制作企业内刊吧 1.登录与上传 访问FLBOOK官网&#xff0c;注册账号后上传排版好的文档 2.选择模板 FLBOOK提供了丰富的…...

Java中的修饰符,类,接口,多态

最近学了Java中的修饰符&#xff0c;类&#xff0c;接口&#xff0c;多态1.修饰符学了public&#xff0c;默认&#xff0c;protected&#xff0c;private。public是公用的&#xff0c;都能访问。默认的话只能在同类中和同包中调用&#xff0c;而protected则可以在同类中&#x…...

PCIe新手必看:3层体系结构详解(附实战避坑指南)

PCIe三层体系结构深度解析&#xff1a;从原理到实战避坑指南 刚接触PCIe总线的工程师们&#xff0c;常常会被其复杂的协议栈和晦涩的专业术语所困扰。作为现代计算机系统中至关重要的高速串行总线标准&#xff0c;PCIe凭借其分层架构设计&#xff0c;在保证兼容性的同时实现了性…...

简单的kail中使用docker搭建vulhub靶场

我这里kali版本是6.12.38 一&#xff0c;安装docker 提权&#xff1a;sudo su 更新一手软件资源 命令&#xff1a;apt-get update ┌──(root㉿kali)-[/home/kali/Desktop] └─# apt-get update 获取:1 http://mirrors.ustc.edu.cn/kali kali-rolling InRelease [34.0 kB]…...

snabbt.js与Hammer.js集成终极指南:打造流畅触摸手势动画的10个技巧

snabbt.js与Hammer.js集成终极指南&#xff1a;打造流畅触摸手势动画的10个技巧 【免费下载链接】snabbt.js Fast animations with javascript and CSS transforms 项目地址: https://gitcode.com/gh_mirrors/sn/snabbt.js snabbt.js是一个轻量级JavaScript动画库&#…...

C++与C混合编程:extern ‘C‘原理与实践指南

1. 揭开extern C的神秘面纱第一次看到extern C这个语法时&#xff0c;我和大多数C新手一样感到困惑。它看起来像是一个可有可无的修饰符&#xff0c;直到我在实际项目中踩了坑才明白它的重要性。记得那是一个跨平台的网络库项目&#xff0c;当我们尝试在C代码中调用一个C语言编…...

OpenClaw调试技巧:Qwen3.5-9B任务失败的根本原因分析

OpenClaw调试技巧&#xff1a;Qwen3.5-9B任务失败的根本原因分析 1. 问题背景&#xff1a;当OpenClaw遇上Qwen3.5-9B 上周我尝试用OpenClaw自动化处理一批技术文档&#xff0c;对接的是本地部署的Qwen3.5-9B模型。本以为有了这个90亿参数的"大杀器"&#xff0c;任务…...

OpenClaw自动化测试:Qwen3-4B驱动接口回归验证

OpenClaw自动化测试&#xff1a;Qwen3-4B驱动接口回归验证 1. 为什么选择OpenClaw做自动化测试&#xff1f; 去年接手一个个人项目时&#xff0c;我遇到了一个典型问题&#xff1a;每次修改代码后&#xff0c;都要手动执行十几个接口测试用例。这种重复劳动不仅耗时&#xff…...

模电学习难点解析与实战突破指南

1. 为什么模电让人如此头疼&#xff1f;作为一名在电子行业摸爬滚打多年的工程师&#xff0c;我完全理解大家学习模拟电路时的痛苦。记得我大学时第一次接触模电课&#xff0c;老师讲了三遍共射放大电路&#xff0c;我愣是没听懂。直到后来在实际项目中反复调试电路&#xff0c…...

瑞芯微Linux驱动工程师面试技术要点解析

1. 瑞芯微Linux驱动工程师面试全解析 作为一名在嵌入式Linux领域摸爬滚打多年的老司机&#xff0c;今天想和大家分享一份瑞芯微社招Linux驱动工程师的真实面经。不同于网上那些泛泛而谈的面试技巧&#xff0c;这份面经完全基于实际项目经验展开&#xff0c;可以说是"写什么…...

MPI-3.x,4.x,5.x新增核心功能

文章目录MPI-3.x,4.x,5.x新增核心功能一、MPI 3.x 系列&#xff08;现代MPI的基石&#xff09;MPI 3.0&#xff08;2012&#xff09;——革命性升级MPI 3.1&#xff08;2015&#xff09;——小幅增强二、MPI 4.x 系列&#xff08;超大问题 下一代架构&#xff09;MPI 4.0&…...