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

Posted

技术标签:

【中文标题】基于 Spring Boot / Spring Security 角色的授权无法正常工作 [重复]【英文标题】:Spring Boot / Spring Security role based authorization not working properly [duplicate] 【发布时间】:2021-09-16 20:33:19 【问题描述】:

我正在尝试使用 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】:

我认为这是 Spring Security 最不明显的事情。角色和权限是相同的东西,但角色应该以ROLE_ 为前缀。所以,正确的用法是

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

【讨论】:

以上是关于基于 Spring Boot / Spring Security 角色的授权无法正常工作 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot Security

spring boot 分布式锁组件 spring-boot-klock-starter

Spring boot集成Nacos-配置中心详解

spring boot/cloud 启动方式说明

为什么说 Java 程序员必须掌握 Spring Boot ?

Spring Boot自动配置源码解析(基于Spring Boot 2.0.2.RELEASE)