因为一句代码,老大差点拿我祭旗!Spring Security authorizeRequests 顺序问题不容忽视

 

​今天,老大给我布置了一个非常简单的任务,真的非常简单:开发一个个人基本信息展示页面,展示个人的一些基本信息,并且权限配置要配置为无需登录即可访问。

感谢大哥照顾我,给我这么简单的任务,那就开干吧。

 

一顿操作猛如虎,页面写完后,到Spring Security的配置方面,不就是无权限认证嘛,还不是手到擒来。

http..authorizeRequests().antMatchers("/user/profile/**").permitAll()

这么简单的东西,没有必要再走各种测试流程了吧,况且这么忒简单了,我相信自己的能力。提交,push,发布。

大概过了20多分钟吧,老大就怒气冲冲的过来了,每秒2万的并发,全重定向到了登录页面了,不是和你说过了,不需要身份认证吗?

真的是十万火急的军情!!!

然而此时,我还非常自信,不可能!脱口而出。老子这么多年的经验,这么简单的东西岂会犯错?

然而,当老大把客服截图、日志摔到我脸上时,我才发现,可能我真的错了。

以多年经验来看,估计是被 Spring Security 框架给拦截了,并且重定向了。为啥呢?明明已经放开权限控制了呀。

http    .formLogin()    ......    .and()    .authorizeRequests()    .anyRequest()    .authenticated()    .antMatchers("/logout_success").permitAll()    ......   

无奈,只有仔细去看看源码了。

扒拉了半天源码才发现,authorizeRequests() 所创建的 RequestMatcher 是有顺序的。

而最终的OrRequestMatcher逻辑则是,谁先匹配,就匹配谁。

那到这里,问题就明朗了,我把antMatchers("/xx").permitAll() 写到了 authorizeRequests 匹配链的最末端,而最前端则是任意匹配且需身份认证通过,那自然就不会执行无权限认证的逻辑了。

打补丁分支,提交,push,拿到测试账号,亲自验证通过以后,发版部署。

尘埃落定,我想说的是,写代码真的需要一丝不苟,抽丝剥茧的精神,并且还要知其然知其所以然,不能光凭经验了。我看今天这架势,老大差点拿我祭了旗,幸亏短时间内解决了,一身冷汗!!!

 

 

 

回复以下关键字,获取更多资源

 

SpringCloud进阶之路 | Java 基础 | 微服务 | JAVA WEB | JAVA 进阶 | JAVA 面试 | MK 精讲

 

 

 

 

笔者开通了个人微信公众号【银河架构师】,分享工作、生活过程中的心得体会,填坑指南,技术感悟等内容,会比博客提前更新,欢迎订阅。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值