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

基于Spring启动/Spring Security角色的授权无法正常工作[重复]

郤旭东
2023-03-14

我正在尝试用Spring Boot学习Spring Security性。我有一个我正在实现它的演示。它适用于登录页面和配置文件方法,可以由任何有效用户进行身份验证。但当我试图访问某个特定角色时,它不起作用,并给我一个“403-拒绝访问”。

我的接入点

    @Controller
public class HomeController {

    @RequestMapping("/")
    public String home() {
        return "/home.jsp";
    }

    @RequestMapping("/profile")
    public String profile() {
        return "/profile.jsp";
    }

    @RequestMapping("/admin")
    public String admin() {
        return "/admin.jsp";
    }

    @RequestMapping("/management")
    public String management() {
        return "/management.jsp";
    }

}

我的配置方法

    @Override
protected void configure(HttpSecurity http) throws Exception {
    http
            .csrf().disable()
            .authorizeRequests()
            .antMatchers("/login", "/").permitAll()
            .antMatchers("/profile").authenticated()
            .antMatchers("/admin").hasRole("ADMIN")
            .antMatchers("/management").hasAnyRole("ADMIN", "MANAGEMENT")
            .anyRequest().authenticated()
            .and()
            .formLogin()
            .loginPage("/login").permitAll()
            .and()
            .logout().invalidateHttpSession(true)
            .clearAuthentication(true)
            .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
            .logoutSuccessUrl("/logout-success").permitAll();
}

我的角色分配

    @Override
public Collection<? extends GrantedAuthority> getAuthorities() {
    return Collections.singleton(new SimpleGrantedAuthority("ADMIN"));
}

共有1个答案

公沈义
2023-03-14

我认为这是Spring Security最不明显的地方。角色和权限是一样的,但是角色的前缀应该是ROLE\uu。所以,正确的用法是

@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
    return Collections.singleton(new SimpleGrantedAuthority("ROLE_ADMIN"));
}
 类似资料:
  • 我对Spring靴还不熟悉。我需要在spring boot中实现基于角色的授权。我有不同的角色,多个用户将映射到每个角色。每当调用api时,我都会设置不同的访问权限(读取、添加、删除、编辑),需要检查访问权限并允许权限。我计划使用拦截器调用具有查询的方法,以从DB获取访问权限,并拒绝或访问api。有没有其他更好的方法我可以用同样的方法?

  • 我正在开发一个基于spring security的web应用程序,我想根据登录用户的角色是ADMIN还是user来限制侧栏上的项目。就身份验证而言,一切正常,但角色没有按预期工作。 跟随这篇文章 例如- 即使我以-ADMIN登录,上述元素也永远不可见。 有人能在这里帮助我理解出了什么问题吗? 安全配置 UserDetailsImpl 用户详细信息服务 用户详细信息 控制器 使用者 在db中创建的表

  • 我是oAuth2安全系统的新手。关于访问REST资源的基于用户角色的授权,我有一个问题。我的互联网冲浪提供了关于oauth2的身份验证部分的输入。 让我提供给你困扰我的情况。

  • 问题内容: 我正在尝试在Centos 6.6上将以下服务脚本用于apache jmeter。 service jmeter start和service jmeter stop正常运行,但是当我尝试重新启动service jmeter时,它正在停止Java实例,但由于认为jmeter已经在运行,因此没有再次启动它。 任何指针将不胜感激。 问题答案: 您没有在stop和start命令之间进行重置/更新

  • 在.NET core中,我尝试了一系列方法,例如在我的控制器方法中添加或以及使用基于策略的授权,在此我检查实现中的。 如果我在身份验证处理程序中设置了一些断点。当它被击中时,我可以看到“tester”和“developer”角色被列为IEnumerable下的项,如下所示。 因此,通过验证集合中和的值,我应该能够成功地在身份验证处理程序中进行授权,但这需要我反序列化声明值,这些声明值似乎只是JSO

  • 问题内容: 我有一个课程,如何让@JsonIgnore工作。即使将注释放在此处,它也不会影响输出。我正在使用杰克逊。 这是我的Controller方法: 这是我的servlet-context.xml: 问题答案: 我终于找到了解决方案。我将导入声明从 至 基本上,您必须确保在所有地方都使用相同的类。