SpringSecurity学习笔记之 入门 十 一(oauth2.0整合 redis保存token)

之前我们的token都是保存在内存中。这是不合理的。【反正教程是这么写的】,可能是他的token有别于jwt的token吧。因为每次重启服务器就失效了嘛。。那就应该是临时token了。。
这里我们就把他的资源访问token进行缓存redis
maven:
redis依赖:
spring-boot-starter-data-redis
对象池依赖:
commons-pool2

原因:

放在内存中token有可能丢失,放关系数据库,效率低,所以采用redis

配置:

在刚才配置密码模式的地方,进行配置

在授权管理器后方.tokenStore();里面需要一个tokenStore;我们去配置一个!
创建一个RedsiConfig配置类,在里面返回一个@Bean=>TokenStore;配置这个需要一个redis连接工厂 我们直接注入进来,RedisConnectionFactory;

然后我们new 一个RedisTokenStore,将连接工厂给他。让他返回
【security本身就准备了这个RedisTokenStore,已经准备好了我们给他一个连接工厂】

@Configuration
public class RedisConfig {
    @Autowired
    private RedisConnectionFactory redisConnectionFactory;
    @Bean
    public TokenStore redisTokenStore(){
        return new RedisTokenStore(redisConnectionFactory);
    }
}

然后回到我们刚才配置密码模式的地方将tokenStore注入进来并交给他

/**
     * 密码模式配置
     * @param endpoints
     * @throws Exception
     */
    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
        endpoints
                //自定义登录逻辑,我们把之前自定义的登录逻辑类注进来填进去(实现UserDetailService的类)
                .userDetailsService(userDetailsService)
                //配置授权管理器
                .authenticationManager(authenticationManager)
                //redis保存token配置
                .tokenStore(tokenStore);
        ;
    }

到这就完成了。token信息就会保存在redis;
这里会有一个坑

这里是由于低版本的redis并不能很好的支持oauth2的redis。需要升级oauth的版本,但是由于oauth会经过springboot的二次封装,又变回springboot的版本。。这里有两个解决办法,
1;提升boot版本号
2;屏蔽boot中的版本。另外导入

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-oauth2</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.security.oauth</groupId>
                    <artifactId>spring-security-oauth2</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
 
        <dependency>
            <groupId>org.springframework.security.oauth</groupId>
            <artifactId>spring-security-oauth2</artifactId>
            <version>2.3.3.RELEASE</version>
        </dependency>

如果提升boot版本后依然不行,直接引入2.3.3版本

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Security OAuth2.0 是基于 Spring Security 框架实现的用于认证和授权的开源库。它提供了一种标准的方式来保护和控制你的应用程序中的资源,同时也支持第三方应用程序通过 OAuth2.0 协议与你的应用程序进行交互。 OAuth2.0 是一个开放标准的授权协议,它允许用户授权第三方应用程序访问他们在另一个服务(资源服务器)上存储的受保护资源,而无需将用户名和密码提供给第三方应用程序。OAuth2.0 协议定义了四种角色:资源所有者(用户),客户端(第三方应用程序),授权服务器(负责验证用户身份并颁发访问令牌),以及资源服务器(存储受保护资源)。下面是 Spring Security OAuth2.0 的工作原理: 1. 客户端向授权服务器发送认证请求,包括客户端标识和重定向 URI。 2. 授权服务器验证客户端标识,并要求用户进行身份验证。 3. 用户提供凭据进行身份验证后,授权服务器生成授权码(authorization code)。 4. 授权服务器将授权码发送回客户端提供的重定向 URI。 5. 客户端收到授权码后,使用该授权码向授权服务器发送令牌请求。 6. 授权服务器验证客户端和授权码,并生成访问令牌(access token)和可选的刷新令牌(refresh token)。 7. 授权服务器将访问令牌和刷新令牌发送回客户端。 8. 客户端使用访问令牌向资源服务器请求受保护资源。 9. 资源服务器验证访问令牌,并向客户端返回受保护资源。 Spring Security OAuth2.0 提供了一些核心的组件来支持 OAuth2.0 协议,例如: - AuthorizationServer:负责颁发令牌和管理客户端的认证服务器。 - ResourceServer:保护受 OAuth2.0 保护的资源的资源服务器。 - TokenStore:用于存储访问令牌和刷新令牌的接口,可以使用内存、数据库或 Redis 等作为存储方式。 - UserDetailsService:用于加载用户信息的接口,可以从数据库或其他数据源中获取用户信息。 通过配置这些组件,你可以在 Spring Security 中实现 OAuth2.0 认证和授权的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值