spring-security -oauth2 整合 JWT

news2024/11/24 4:48:16

 前言

在这个基础上,进行整合。

spring security oauth2学习 -- 快速入门_本郡主是喵的博客-CSDN博客

1.jwt的一般使用

先把 reids,common-pools 等依赖删掉。

删掉redis的下相关配置

1.1 导入依赖

		<!--jjwt-->
		<dependency>
			<groupId>io.jsonwebtoken</groupId>
			<artifactId>jjwt</artifactId>
			<version>0.9.1</version>
		</dependency>

1.2 核心代码

创建jwtTokenConfig.java

@Configuration
public class jwtTokenConfig {

    @Bean
    public JwtTokenStore jwtTokenStore(){
        return new JwtTokenStore(jwtAccessTokenConverter());
    }
    
    // // jwt令牌转换器,将内置token转换成jwt
    @Bean
    public JwtAccessTokenConverter jwtAccessTokenConverter() {
        // 配合JWT使用的秘钥
        JwtAccessTokenConverter accessTokenConverter = new JwtAccessTokenConverter();
        accessTokenConverter.setSigningKey("test_key");
        return accessTokenConverter;
    }
}

AuthenticationServer.java 里面新增这些。

 @Autowired
    private JwtTokenStore tokenStore;

    @Autowired
    private JwtAccessTokenConverter jwtAccessTokenConverter;

    /**
     *  密码模式
     * @param
     * @return
     */
    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
        endpoints.authenticationManager(authenticationManager)
                .userDetailsService(userService)
                // 配置令牌存储策略
                .tokenStore(tokenStore)
                .accessTokenConverter(jwtAccessTokenConverter);
    }

 运行,启动!

 复制这个token去官网解析。

 2.扩展jwt的内容

我们新建JwtTokenEnhancer.java,指定扩容的内容。

AuthenticationServer.java ,配置中,加入你的扩容配置,和token转换器。

新建 JwtTokenEnhancer.java 


public class JwtTokenEnhancer implements TokenEnhancer {
    // 往我们的jwt中添加自定义的信息
    @Override
    public OAuth2AccessToken enhance(OAuth2AccessToken oAuth2AccessToken, OAuth2Authentication oAuth2Authentication) {
        HashMap<String, Object> info = new HashMap<>();
        info.put("enhance","enhance info");
        ((DefaultOAuth2AccessToken)oAuth2AccessToken).setAdditionalInformation(info);
        return oAuth2AccessToken;
    }
}

JwtTokenConfig.java 新加,这个bean 就是我们自定义的bean。

 @Bean
    public JwtTokenEnhancer jwtTokenEnhancer(){
        return new JwtTokenEnhancer();
    }

 往 AuthenticationServer.java 新加

    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
        // 配置令牌扩容策略
        TokenEnhancerChain enhancerChain = new TokenEnhancerChain();

        ArrayList<TokenEnhancer> delegates = new ArrayList<>();
        delegates.add(jwtTokenEnhancer);
        delegates.add(jwtAccessTokenConverter);
        // 我们扩容的token也是需要令牌转换成jwt
        enhancerChain.setTokenEnhancers(delegates);

        endpoints.authenticationManager(authenticationManager)
                .userDetailsService(userService)
                // 配置令牌存储策略
                .tokenStore(tokenStore)
                .accessTokenConverter(jwtAccessTokenConverter)
                .tokenEnhancer(enhancerChain); // 使用令牌扩容
    }

用postMan重新访问那个网址。

拿到token解析。

 3.解析jwt的内容

衔接上个博客,修改我们 UserController.java 中的

public Object getCurrentUser(Authentication authentication,HttpServletRequest request){
        // 从请求头中,那jwt token
        String header = request.getHeader("Authorization");
        String token = header.substring(header.indexOf("bearer") + 7);

        Object principal = authentication.getPrincipal();
        return Jwts.parser()
                .setSigningKey("test_key")
                .parseClaimsJws(token)
                .getBody();

    }

 我们还是从授权服务器拿到token,后直接资源服务器拿内容。

 4.开启刷新令牌

往我们授权服务器配置中,

 .authorizedGrantTypes("password","refresh_token","authorization_code"); 
// 开启刷新令牌,貌似传入多个模式参数,能够开启授权服务器多个模式

 打开postMan,访问原先拿token,会发现多了个refresh_token 键值对

 按照下图,这个将你访问的路径复制一份。这个refresh_ token 的value值就是,上图的刷新令牌。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/667449.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023年测试工程师的职业规划?从入行到“顶薪“卷起来...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 初级测试工程师&a…

Python实现性能自动化测试竟然如此简单

一、思考 1.什么是性能自动化测试? 性能系统负载能力超负荷运行下的稳定性系统瓶颈自动化测试使用程序代替手工提升测试效率性能自动化使用代码模拟大批量用户让用户并发请求多页面多用户并发请求采集参数&#xff0c;统计系统负载能力生成报告 2.Python中的性能自动化测试…

Netty 进阶

粘包与半包 粘包和半包问题的出现原因主要是因为 TCP 协议是面向流的&#xff0c;而不是面向报文的。即发送方给接收方传输的是一整个数据流&#xff0c;但是接收方并不知道数据流中的哪一部分才是一个完整的数据报&#xff0c;需要自行判断。 如果是在发送方解决&#xff0c;通…

微服务链路追踪SkyWalking的介绍和部署

skywalking和链路追踪 SkyWalking介绍 首先我们要明白一点&#xff0c;在微服务的架构中&#xff0c;为什么要做链路追踪&#xff1f;解决问题的痛点在哪里&#xff1f;其实无外乎是如下几个问题&#xff1a; 如何将整个调用链路串起来&#xff0c;并能够快速定位问题&#…

供应链管理是干什么的,企业为什么要用供应链管理?

供应链管理的核心是&#xff1a;需求、生产、供应等方面的管理。没有对需求的管理&#xff0c;供应链管理就没有存在的价值&#xff0c;需求管理主要是产品生命周期管理&#xff0c;订单及预测管理&#xff0c;尽管预测永远是错误的&#xff0c;但这并不排除你可以做出一个相对…

C语言学习笔记:单链表

✨博文作者&#xff1a;烟雨孤舟 &#x1f496; 喜欢的可以 点赞 收藏 关注哦~~ ✍️ 作者简介: 一个热爱大数据的学习者 ✍️ 笔记简介&#xff1a;作为大数据爱好者&#xff0c;以下是个人总结的学习笔记&#xff0c;如有错误&#xff0c;请多多指教&#xff01; 目录 单链表…

深度学习-网络模型的可视化工具总结

强烈感谢公众号&#xff1a;尤而小屋 提供的文章思路 神经网络可视化难点在哪里&#xff1f; 神经网络可视化的难点在于以下几个方面&#xff1a; 复杂性&#xff1a;神经网络的结构通常非常复杂&#xff0c;包含大量的神经元和连接。对于大规模网络&#xff0c;准确地可视化每…

基于STM32的四旋翼无人机项目(二):MPU6050姿态解算(含上位机3D姿态显示教学)

前言&#xff1a;本文为手把手教学飞控核心知识点之一的姿态解算——MPU6050 姿态解算&#xff08;飞控专栏第2篇&#xff09;。项目中飞行器使用 MPU6050 传感器对飞行器的姿态进行解算&#xff08;四元数方法&#xff09;&#xff0c;搭配设计的卡尔曼滤波器与一阶低通滤波器…

五大自动化测试的Python框架详解

目录 1.Robot Framework 2.Pytest 3.UnitTest/PyUnit 4.Behave 5.Lettuce 结语 在此为大家准备了五种Python类型的自动化测试框架&#xff0c;以供比较和讨论。 1.Robot Framework 作为最重要的Python测试框架之一&#xff0c;Robot Framework主要被用在测试驱动(test-…

【序列dp】最长上升子序列(二)

文章目录 最长上升子序列-序列dp1016 最大上升子序列和1010. 拦截导弹187. 导弹防御系统272.最长公共上升子序列n^3 TLE优化 最长上升子序列-序列dp 什么是序列相关的 DP &#xff1f;序列相关 DP&#xff0c;顾名思义&#xff0c;就是将动态规划算法用于数组或者字符串上&…

前端项目工程化搭建

ESLint 在开发过程中&#xff0c;需要遵循一些规范&#xff0c;可以使用下面的工具来配置不同项目需要遵循的规范&#xff0c;来帮助我们检查错误、约束开发过程。 ESLint 配置 使用 Taro CLI 创建的项目&#xff0c;会自动生成 .eslintrc 文件。只需要在这个文件的 rules 配…

web渗透

首先这道题目与ctf还是有点关系的&#xff0c;首先看一下题目&#xff1a; 通过浏览器访问http://靶机服务器IP/1&#xff0c;对该页面进行渗透测试, 找到flag格式&#xff1a;flag&#xff5b;Xxxx123&#xff5d;&#xff0c;括号中的内容作为flag值并提交&#xff1b;&…

关于深度学习训练的工程技巧

前置基础 不同精度数据类型的动态范围 FP16的动态范围(6x10-8 ~ 65504) FP32的动态范围(1.4x10-45 ~ 1.7x1038) 可以看出Fp32的动态范围远大于fp16; 其中BF16的取值范围&#xff1a; BF16&#xff08;BFloat16&#xff09;的取值范围也是按照IEEE 754标准定义的&#xff0c;…

破解时间序列:移动平均法的综合指南

目录 前言一、时间序列介绍1-1、时间序列定义1-2、时间序列特性1-3、时间序列作用 二、统计学方法2-1、移动平均法介绍2-1-1、基本原理、计算过程2-1-2、移动平均法分类2-1-3、简单移动平均法2-1-4、加权移动平均法2-1-5、指数移动平均法&#xff08;Exponential Moving Averag…

C# 反射(Reflection)总结

目录 什么是反射&#xff1f; 为什么使用反射&#xff1f; 反射机制的优缺点 如何使用反射&#xff1f; 一&#xff0c;Type访问元数据 获取/修改类中公有成员&#xff08;属性PropertyI和字段Field等&#xff09; 调用类中的公有构造函数Constructor 调用类中的公有方…

【软件工程】软件工程期末考试复习题

填空题&#xff08;每空1分&#xff0c;共25分&#xff09; 软件生存周期一般可以划分为&#xff0c;问题定义、可行性研究、需求分析、设计、编码、测试和运行和维护。基于软件的功能划分&#xff0c;软件可以划分成___系统软件_、支撑软件、应用软件__三种。可行性研究&…

【UE 从零开始制作坦克】10-炮弹溅射伤害

目录 一、解决炮弹穿过坦克炮塔问题 二、炮弹溅射伤害 效果 一、解决炮弹穿过坦克炮塔问题 打开“PHYS_West_Tank_M1A1Abrams”这个物理资产 造成这种现象的原因是&#xff0c;炮弹只会与如下紫色区域产生碰撞事件 选中坦克炮塔的骨骼 添加盒体外形 缩放盒体外形使其包裹住…

数据库原理之数据库事物

文章目录 一、事物介绍1.1 事物的目的是保证数据的一致性1.2 事物的ACID A、I、D是为了实现 C1.3 什么是本地事物(Local Transactions) 二、数据库系统如何实现ACID2.1 影响深远的ARIES理论2.2 本地事物如何实现原子性和持久性 A、D2.2.1 实现原子性和持久性的Commit Logging方…

基于高精度三维机器视觉的汽车曲轴无序抓取系统应用

Part.1 行业背景 汽车产业的高速发展&#xff0c;对零部件自动化生产提出了更高要求。随着汽车销量的水涨船高&#xff0c;传统的手工生产模式已经难以满足大批量生产的需求&#xff0c;自动化生产是必然趋势。 曲轴是汽车发动机的关键组件之一&#xff0c;生产过程复杂&#…

【MySQL】如何速通MySQL(4)

&#x1f4cc;前言&#xff1a;本篇博客介绍如何速通MySQL的第四篇&#xff0c;主要介绍Mysql中主要的基础的入门&#xff0c;学习MySQL之前要先安装好MySQL&#xff0c;如果还没有安装的小伙伴可以看看博主前面的博客&#xff0c;里面有详细的安装教程。或者看一下下面这个链接…