Spring 权限在登录后 <sec:authorize> 中不可用
Spring Authorities not available in <sec:authorize> after login
我正在使用 spring security 4.0.2 和 spring webflow 2.4.2
在 JSF 页面中,使用 ROLE_ANONYMOUS,我没有任何问题。
<sec:authorize ifAnyGranted="ROLE_ANONYMOUS">
...
</sec:authorize>
但是,登录后,这不起作用
<sec:authorize access="hasRole('ACESSO-BO2')">
...
</sec:authorize>
但这行得通:
<sec:authorize access="isAuthenticated()">
...
</sec:authorize>
视图知道它已通过身份验证,但不知道此用户的角色。
在我的控制器中,这显示了正确的权限:
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
List<GrantedAuthority> listaAuth = (List<GrantedAuthority>) auth.getAuthorities();
while (i < listaAuth.size()){
System.out.println(i+":"+listaAuth.get(i).getAuthority());
i++;
}
这是怎么引起的,我该如何解决?
从 Spring 4 开始,hasRole
功能会检查传入角色是否以角色前缀为前缀(默认为 ROLE_
),如果没有,则将其添加到传入的角色中(参见 SEC-2758)。
您正在传递 ACESSO-BO2
,Spring 安全现在正在检查用户是否具有 ROLE_ACESSO-BO2
的权限。后者恐怕不是这样。
要么更改您的安全性并使用 ROLE_
作为所有权限的前缀,要么使用 hasPermission
而不是 hasRole
,后者不添加前缀。
我正在使用 spring security 4.0.2 和 spring webflow 2.4.2 在 JSF 页面中,使用 ROLE_ANONYMOUS,我没有任何问题。
<sec:authorize ifAnyGranted="ROLE_ANONYMOUS">
...
</sec:authorize>
但是,登录后,这不起作用
<sec:authorize access="hasRole('ACESSO-BO2')">
...
</sec:authorize>
但这行得通:
<sec:authorize access="isAuthenticated()">
...
</sec:authorize>
视图知道它已通过身份验证,但不知道此用户的角色。
在我的控制器中,这显示了正确的权限:
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
List<GrantedAuthority> listaAuth = (List<GrantedAuthority>) auth.getAuthorities();
while (i < listaAuth.size()){
System.out.println(i+":"+listaAuth.get(i).getAuthority());
i++;
}
这是怎么引起的,我该如何解决?
从 Spring 4 开始,hasRole
功能会检查传入角色是否以角色前缀为前缀(默认为 ROLE_
),如果没有,则将其添加到传入的角色中(参见 SEC-2758)。
您正在传递 ACESSO-BO2
,Spring 安全现在正在检查用户是否具有 ROLE_ACESSO-BO2
的权限。后者恐怕不是这样。
要么更改您的安全性并使用 ROLE_
作为所有权限的前缀,要么使用 hasPermission
而不是 hasRole
,后者不添加前缀。