SpringSecurity整合JWT,经过SpringCloudGateway转发请求,出现发起同一个请求,第一次请求通过,后面的相同请求出现403的问题

今天遇到了一个问题,在发起请求,经过SpringCloudGateway网关,然后转发到具体的微服务处理时,出现第一次请求通过,后面再请求同一个地址时,出现403拒绝访问的问题。

问题描述:

  1. 在header中携带token,并发起请求
  2. 将token解析后的用户信息,通过SecurityContextHolder.getContext().setAuthentication()保存在上下文环境中
  3. 请求结束后,发起第二次请求,发现Authentication中的Principal变成了“anonymousUser”
  4. 然后出现了403 forbidden的错误

解决方案:

    //安全拦截机制
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/**").permitAll()
                .anyRequest().authenticated()
                .and().csrf().disable()
                // 定制我们自己的 session 策略:调整为让 Spring Security 不创建和使用 session
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
    }

在拦截配置中加上sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS),调整为让 Spring Security 不创建和使用 session。

再次发起相同请求时,就不会再出现403 forbidden的问题了。

特此记录一下这个问题的解决方案,具体原因不详,待日后有空,再做深入研究。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
SpringCloud Gateway是一个基于Spring Framework 5,Spring Boot 2和Project Reactor的反应式API网关,它提供了一种简单而有效的方式来路由请求和过滤器请求,可以用于构建微服务架构中的网关层。 Spring Security是一个强大且灵活的身份验证和访问控制框架,可以集成到Spring应用程序中,用于保护应用程序的安全性。 JWT(JSON Web Token)是一种用于在网络应用间传递声明的一种基于JSON的开放标准。它可以通过数字签名来验证数据的完整性,并使用密钥对数据进行加密。 结合SpringCloud GatewaySpring SecurityJWT可以实现一个安全的微服务架构。在这种架构中,SpringCloud Gateway作为网关层负责路由请求和进行安全过滤,Spring Security用于进行身份验证和访问控制,而JWT则用于传递和验证身份信息。 具体实现方案可以参考以下步骤: 1. 在SpringCloud Gateway中配置路由规则,将请求转发到相应的微服务。 2. 在Spring Security中配置身份验证和访问控制规则,例如用户名密码验证、角色授权等。 3. 在用户登录时生成JWT,在每个请求中将JWT作为Authorization头部发送给网关。 4. 网关收到请求后,解析JWT并验证其有效性和签名,如果验证通过,则将请求转发到相应的微服务。 5. 微服务在接收到请求后,可以通过解析JWT获取用户身份信息,并根据用户的权限进行相应的业务处理。 以上是一个简单的概述,具体的实现需要根据实际需求进行配置和开发。希望对你有所帮助!如果你还有其他问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值