spring security中的secure何时校验

本文探讨了Spring Security中Secure注解的校验时机及流程。通过分析源码,揭示了Secure注解如何在控制器方法调用前进行权限检查,并解释了401错误响应的触发条件。

spring security中的secure何时校验

初始动机

项目引入了spring-security 作为权限校验,在controller方法上加了 Secure 的注解,后面又加了 filter,发现 Secure 的调用是在 filter 之后的,所以想查一下源码看看原因是什么。

从401报错开始查找

Secure校验失败的时候会返回401的错误码,所以就从抛了AuthenticationCredentialsNotFoundException这个异常的代码反向查找,然后在AbstractSecurityInterceptor里看到了credentialsNotFound方法中会抛出这个异常,于是又顺着看,发现了beforeInvocation方法,这个方法应该是在配置了 Secure注解的controller方法调用前被执行的。
调用栈

beforeInvocation方法中,可以看到获取Secure值的地方

Collection<ConfigAttribute> attributes = this.obtainSecurityMetadataSource()
				.getAttributes(object);

如果attributes值为空,则不做校验,否则会查看authentication是否为空

SecurityContextHolder.getContext().getAuthentication() == null

为空,则说明没有登录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值