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

使用用户角色和Spring Security性保护URL

荆乐
2023-03-14

我的Java应用程序中有多个用户角色。下面是我的代码:

private String userAccess[] = new String[]{"/dashboard/**"};
private String dataAccess[] = new String[]{"/dashboard/**", "/data/**"};
private String adminAccess[] = new String[]{"/dashboard/**", "/data/**", "/admin/**"};

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.csrf().disable()
        .authorizeRequests()
        .antMatchers(publicResources).permitAll()
            .antMatchers(userAccess).hasRole("USER").anyRequest().authenticated()
            .antMatchers(dataAccess).hasRole("DATA").anyRequest().authenticated()
            .antMatchers(adminAccess).hasRole("ADMIN").anyRequest().authenticated()

错误:

因此,所发生的情况是,它加载了用户数据的URL访问权限,但当执行最后一行时,它将/dashboard URL更改为具有ADMIN访问权限。我的角色仍然是数据角色,因此不能访问/dashboard URL。

最后一行似乎覆盖了其他行。再来看看URL特权,如果我删除“/dashboard”,那么当涉及到“/data”URL时,我会得到同样的问题。

有没有更好的方法来解决这个问题?

谢谢

共有1个答案

毛成济
2023-03-14

如果不重复角色的终结点,该怎么办

private String userAccess[] = new String[]{"/dashboard/**"};
    private String dataAccess[] = new String[]{"/data/**"};
    private String adminAccess[] = new String[]{"/admin/**"};

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable()
                .authorizeRequests()
                .antMatchers(publicResources).permitAll()
                .antMatchers(userAccess).hasAnyRole("USER", "DATA", "ADMIN").anyRequest().authenticated()
                .antMatchers(dataAccess).hasAnyRole("DATA", "ADMIN").anyRequest().authenticated()
                .antMatchers(adminAccess).hasRole("ADMIN").anyRequest().authenticated();
    }
 类似资料:
  • 我试图在一个带有spring security和KeyClope的java应用程序中同时使用领域和资源角色。不幸的是,KeyClope只会返回一个或另一个,具体取决于: 您仍然可以通过自定义代码获得这两种方法,但它会弄乱@PreAuthorize或spring boot方法等注释。isUserInRole,这会导致难看的代码。 有没有办法覆盖@PreAuthorize方法或JSON令牌Keyclo

  • 本文向大家介绍如何使用SpringSecurity保护程序安全,包括了如何使用SpringSecurity保护程序安全的使用技巧和注意事项,需要的朋友参考一下 首先,引入依赖: 引入此依赖之后,你的web程序将拥有以下功能: 所有请求路径都需要认证 不需要特定的角色和权限 没有登录页面,使用HTTP基本身份认证 只有一个用户,名称为user 配置SpringSecurity springsecur

  • 我从这里的人那里得到了建议,并尝试了一下,我一直在尝试创建一个用户身份验证系统。我很难用雄辩的语言将我所知道的在PHP中工作的东西翻译成Laravel。 我在这里尝试做的是识别用户,他们的角色,如果用户有管理员的角色,他们可以访问路由 /admin 我知道我可以使用诸如委托之类的软件包,但这并不能真正帮助我学习。 我已经为用户和角色创建了模型。我还有一个名为role\u user的查找表,其中包含

  • 我是新来的,尽管我以前已经在这里找到了很多问题的答案。 现在我正在寻求帮助:我的小REST API上有这个小示例资源: 为了过滤角色,我有以下SecurityContext的实现: 以及容器请求过滤器的这种实现: 这是我的应用程序类: 有了所有这些,当我请求URI问候/all时,一切都很好,显示字符串“Hello,大家好!”。但是当我请求URI问候/admin时,即使我的isUserInRole方

  • 我正在尝试制作一个tempmute命令,我遵循了一个在线教程,该教程有效。。。但我自己的服务器有多个角色的用户,这些角色允许他们在接收到“静音”角色时也可以说话。 有没有办法保存所提到用户的所有角色,然后删除和添加这些角色? 我已经试着做了一个新的let变量 然后使用以下方法添加和删除它们: 但那没用 我希望bot删除角色,临时禁用用户并在超时后返回角色。

  • 如果扩展程序损害了他们的隐私或要求提供需要的更多权限,则用户将不会安装该扩展程序。权限请求应对用户有意义,并且限于实现扩展所需的关键信息。 收集或传输任何用户数据的扩展必须遵守用户数据隐私策略。 通过包括以下预防措施来保护和尊重用户,以确保其身份安全。切记:扩展可以访问的数据越少,意外泄漏的数据就越少。 减少所需的权限 扩展可以访问的 API 在 manifest 的权限字段中指定。赋予的权限越多