spring引导/Spring Security 基于角色的授权无法正常工作

q3qa4bjr  于 2021-09-29  发布在  Java
关注(0)|答案(1)|浏览(359)

此问题已在此处找到答案

springboot安全角色不工作(3个答案)
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"));
}
y4ekin9u

y4ekin9u1#

我认为这是关于spring security最不明显的事情。角色和权限是一样的,但是角色的前缀应该是 ROLE_ . 因此,正确的用法是

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

相关问题