SpringSecurity工作问题记录

14 篇文章 0 订阅
2 篇文章 0 订阅

请求未携带token,SpringSecurity是如何拦截到请求并返回403的?

首先有一点要明确,SpringSecurity通过一层层filter过滤请求的。在这些filter中有一个关键类org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationProcessingFilter里面有一个doFilter方法,关键代码如下:
在这里插入图片描述
参考资料

注册在Eureka访问/actuator 404的问题

之前以为404的问题跟注册中心有关,实际没关心在yml中作出如下配置就可访问到

management:
  endpoints:
    web:
      exposure:
        include: ['*']

anyRequest().permitAll() 和 antMatchers(“/*”).permitAll() 区别

之前同事配置的WebSecurityConfigurerAdapter.configure(HttpSecurity http)对所有request方法都拦截不到,直接放行了。
查下了代码他对请求拦截的处理方式是这样的antMatchers("/*").permitAll()
实践发现这样的配置只能拦截到/api这种的,但是实际项目中的配置请求url都是/api/page/user/list这种的,导致根本拦截不到。正解应该是用anyRequest().permitAll()antMatchers("/**").permitAll()

请求已配置免认证但是携带token请求时提示invalid_token Cannot convert access token to JSON

场景:
A服务接口调用B服务的接口但是A、B服务不在一个注册中心,于是通过框架封装的OkHttpClient发起请求,B服务将这个接口url配置为permitAll,但是调用失败
原因:
A服务的接口调用时,携带了A服务的token,这个token也带到了B服务中去,由于A、B服务token不共用导致解析token时异常
源码分析:
org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationProcessingFilter
在这里插入图片描述
解决方法:

  1. A服务的接口调用B服务接口时,再通过OkHttpClient调用哪一步,将token清除掉(重新new HttpHeaders()),该方式B服务必须配置请求接口的免认证
  2. 先获取B服务的token,带着B服务的token去调用B服务接口,该方式B服务不用配置请求接口的免认证

个人理解:
当请求的url已经免认证了为啥要走到OAuth2AuthenticationProcessingFilter这个过滤器中呢?不进到这个过滤器中就可以避免token验证有效性的问题了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值