如何使用HttpSecurity(Spring Security)应用角色?

Yur*_*nko 2 java configuration spring spring-security

我使用的是Spring Security 3.2.3.RELEASE

这是我的WebSecurityConfigurerAdapter的代码

@Configuration
@EnableWebSecurity
public class WebSecurityContext extends WebSecurityConfigurerAdapter {

private static final Logger log = LogManager.getLogger(WebSecurityContext.class);

@Autowired
private AuthenticationProvider authenticationProvider;

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    log.info("Setting AuthenticationManagerBuilder");
    auth.authenticationProvider(authenticationProvider);
}

@Override
protected void configure(HttpSecurity http) throws Exception {
    log.info("Configuring HttpSecurity");
    http
            .authorizeRequests()
                .antMatchers("/admin/**").hasRole("ADMIN")
                .antMatchers("/**").hasRole("USER")
                .anyRequest().authenticated()
                .and()
                .httpBasic();

}
}
Run Code Online (Sandbox Code Playgroud)

结果是:HTTP状态403 - 访问被拒绝

但如果我评论这一行:

//.antMatchers("/**").hasRole("USER")
Run Code Online (Sandbox Code Playgroud)

一切正常.这意味着(我猜)我的角色或HttpSecurity出了问题.

所以我开始调试了.我仔细检查我的UserDetails有两个带有名称的GrantedAuthorities:ADMIN,USER.

那么任何可能导致问题的想法呢?

Tua*_*uan 11

从方法的javadoc hasRole(String role):

指定URL的快捷方式需要特定的角色.如果您不想自动插入" ROLE_ ",请参阅hasAuthority(String).

所以你可以使用hasAuthorityhasAnyAuthority代替

  • 那甚至更好.现在我不必更改我的数据库条目.谢谢 (2认同)