错误示例:
原因分析:
核心就是“权限不允许”造成的为题,但奇葩的是:
可以看到我已经给admin赋全部路径的权限了:
也设置了对应的admin用户:
登录之后仍然还是403error!
解决方法(核心错误的原因是权限分配顺序出错):
在Spring Security中,授权规则是按照声明的顺序进行匹配的。一旦找到第一个匹配的规则,就不会继续检查后面的规则。因此,规则的顺序非常重要。
"/**"
匹配所有路径,这个规则会匹配几乎所有请求,包括 /pages1/**
和 /pages2/**
,并且它需要用户具有 admin
角色。然而,在匹配到 "/**"
之前,/pages1/**
和 /pages2/**
已经被 hasRole("left_author")
和 hasRole("right_author")
捕获,所以即使用户是 admin
角色,当访问 /pages1/**
和 /pages2/**
时,也会匹配到更前面的规则,从而导致403错误。
解决方法1:
将 admin
规则放在最前面,确保 admin
用户的权限优先匹配:
解决方法2:
将hasRole换成hasAnyRole,并且内容添加上admin:
效果:
此后,访问成功!
希望能帮助到大家!