当前位置: 首页 > 知识库问答 >
问题:

在Spring Security中获取用户角色的最佳方法

陶胤运
2023-03-14

我需要检查控制器中的用户权限,以决定将哪个参数列表发送到视图。我知道我可以通过两种方式检查特定用户是否有特定的角色:

    < li >方法1 -使用以下代码创建helper类:securitycontextholder . get context()。getAuthentication()。getAuthorities()。流()。anyMatch(grantedAuthority -

但是哪种方式是最好的呢?对我来说,我选择第一种更有用,因为我可以在控制器之外将其用于内部目的。

    @RequestMapping(value = "/goal/edit/{id}", method = RequestMethod.GET)
    public String edit (@PathVariable Long id, Model model, RedirectAttributes redirect, HttpServletRequest req) {
        Goal goal = goalService.getById(id);

        //Method 1 
        User user = AuthUtils.getCurrentUser();

        //Medhod 2
        Boolean is_admin = req.isUserInRole("ROLE_ADMIN");

        Iterable<Role> roles = null;

        if (is_admin==true) {
            roles = roleService.getAll();
            }
            else roles = user.getRoles();

        model.addAttribute("goal", goal);
        model.addAttribute("roles", roles);
        return "goal_form";
    }

    public class AuthUtils {
    public static boolean hasRole (User user, String roleName)
        {
            return SecurityContextHolder.getContext().getAuthentication().getAuthorities().stream()
                    .anyMatch(grantedAuthority -> grantedAuthority.getAuthority().equals(roleName));
        }
    }

共有1个答案

孟和怡
2023-03-14

正如AMA在评论中的答案:

这不是关于你喜欢哪一个,你需要哪一个!您是否需要在控制器外部检查用户角色,如果是,那么使用第一个是正确的,但是如果您在控制器外部不需要它,则第二种方式更快

我需要检查控制器外部的用户角色,我将用户优先方法。

 类似资料:
  • 这是用户模型: 这是榜样: 正如您所看到的,这两个模型之间存在多对多关系。 现在我想得到一个用户角色的ID数组。为此我写了这个: 但上面的代码返回一个数组,其中包含引用用户拥有的每个角色ID的对象: 但是我想返回一个角色的ID数组,如下所示: 我怎么能那样做?

  • 我是LDAP的新手,我尝试过在OpenLDAP上实现RBAC。我创建了一些用户(inetOrganizationPerson)并将它们放在组中(groupOfNames)。接下来,我创建了一些角色(organizationalRole)并将它们与用户组关联(RoleIncuspant),而不是直接将它们与用户关联。 1)/usr/local/bin/ldapsearch-x-b'ou=groups

  • 我想知道为用户分配的站点角色名称列表。所以我试着如下, 我只能看到用户的常规类型角色。不是网站类型。但在我的情况下,用户是网站管理员。那么如何使用api调用获取用户的站点角色名称呢?

  • 在我的Android应用程序,我想得到用户的当前位置每隔几分钟间隔和更新到我的中心服务器使用网络服务。目前我正在使用融合位置提供获取用户当前位置,请参阅链接 现在我想知道频繁获取用户位置和调用web服务的最佳方法是什么。 下面是我的代码,它为我提供了用户当前位置:- 现在从这里我必须调用这个代码。我可以在后台服务或其他地方使用它吗。 请提供你的想法。 蒂亚。

  • 我在一个有这种结构的拉威尔项目中工作 用户:id | first | u name |。。。 角色:id|name 分配的角色:id |用户id |角色id 我认为这是很明显的:p 用户模型 角色模型 我正在寻找一种方法来获取所有具有指定角色(在本例中为“教师”)的用户。我试过这个: 但这总是返回一个包含所有用户的数组。 有人知道为什么会这样吗?谢谢

  • 我试图找出在Spark dataframe列中获得最大值的最佳方法。 考虑以下示例: 上面的每一个都给出了正确的答案,但在没有Spark分析工具的情况下,我无法判断哪一个是最好的。 就Spark运行时或资源使用而言,上述哪种方法最有效,或者是否有比上述方法更直接的方法,有任何来自直觉或经验主义的想法?