请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

anyRequest

 @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests(req->req.anyRequest().authenticated());
    }
}

这里配置的意思是不是说所有的请求都必须认证?

访问的结果是403而不是我理解的401

图片描述

正在回答 回答被采纳积分+3

2回答

反重力 2022-05-22 11:45:21

我理解是因为这种配置下,会被AnonymousFilter拦截,并添加默认authentication: AnonymousToken。这时候代表authentication是通过的
再往下走到AffirmativeBased中会进行老师说的vote,检查到AnonymousToken没有访问资源的authorization,返回了403。

0 回复 有任何疑惑可以回复我~
接灰的电子产品 2020-11-08 20:04:44

这是由于你没有配置任何认证的方式,比如表单登录等。所以这种配置方式下Spring security会认为认证成功,然后进行授权检查,而在security config中配置的这个表达式在授权检查中返回了不通过,所以403

0 回复 有任何疑惑可以回复我~
  • 提问者 一日看盡長安花 #1
    是不是可以理解为要对请求进行 '认证',必须指定一种登录方式,如果没有指定的话,spring security则不会对相关请求进行认证,接着会做'授权'判断,又因为没有上一步的认证动作,所以授权是不通过的(因为这里授权通过的条件就是'已认证'请求)
    回复 有任何疑惑可以回复我~ 2020-11-08 20:25:18
  • 授权检查那块不是由于上一步没检查,而是这些表达式会作为授权环节的一个投票者进行投票。
    回复 有任何疑惑可以回复我~ 2020-11-08 21:53:54
  • 你说的“这些表达式”具体是指什么, 题主说的这个req->req.anyRequest().authenticated()算一个表达式吗
    回复 有任何疑惑可以回复我~ 2022-03-29 04:33:31
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信