gpt4 book ai didi

java - 如何了解用户在 Spring security 中拥有的所有角色

转载 作者:行者123 更新时间:2023-12-02 05:03:30 27 4
gpt4 key购买 nike

我使用 Spring 安全性,因此请登录我正在构建的网站来学习 Spring。我使用 Hibernate 将 User 对象映射到其他对象,这些对象允许用户根据其角色查看或不查看页面。它有效。

我问我是否可以通过使用authorities-by-username-query了解单个用户拥有的所有角色,而不是检查我的 User 对象。这是我的查询:

        authorities-by-username-query="select u1.utente, 
u1.email, u2.descrizione, u3.id_autorizzazioni,
u3.autorizzazione from autenticazione u1,
autorizzazione u2, autorizzazioni
u3 where u1.utente = u3.utente and
u2.id_autorizzazione = u3.autorizzazione and u1.email =?"

如果我在 mysql 控制台上编写该查询,我会得到 3 条记录,因此该查询是正确的。

这是我的数据库

enter image description here

我用过 Collection<SimpleGrantedAuthority> authorities = (Collection<SimpleGrantedAuthority>) SecurityContextHolder.getContext().getAuthentication().getAuthorities();但我总是得到一个大小为 1 而不是 3 的集合(我在数据库中有 3 个用户角色,如图所示)。我不明白它是否取决于我的数据库或我的按用户名查询的权限。可能两件事之一是错误的

最佳答案

您可以使用SecurityContextHolder.getContext().getAuthentication().getAuthorities()获取当前登录用户角色的集合。

Collection<SimpleGrantedAuthority> authorities = (Collection<SimpleGrantedAuthority>)    SecurityContextHolder.getContext().getAuthentication().getAuthorities();

您拥有权限变量中的角色集合。

多运动

private boolean hasRole(String role) {
Collection<GrantedAuthority> authorities = (Collection<GrantedAuthority>)
SecurityContextHolder.getContext().getAuthentication().getAuthorities();
boolean hasRole = false;
for (GrantedAuthority authority : authorities) {
hasRole = authority.getAuthority().equals(role);
if (hasRole) {
break;
}
}
return hasRole;
}

关于java - 如何了解用户在 Spring security 中拥有的所有角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28021685/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com