簡體   English   中英

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

[英]How to apply roles using HttpSecurity (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();

}
}

結果是:HTTP狀態403 - 訪問被拒絕

但如果我評論這一行:

//.antMatchers("/**").hasRole("USER")

一切正常。 這意味着(我猜)我的角色或HttpSecurity出了問題。

所以我開始調試了。 我仔細檢查我的UserDetails有兩個帶有名稱的GrantedAuthorities:ADMIN,USER。

那么任何可能導致問題的想法呢?

從方法的javadoc hasRole(String role)

指定URL的快捷方式需要特定的角色。 如果您不想自動插入“ ROLE_ ”,請參閱hasAuthority(String)

因此,您可以使用hasAuthorityhasAnyAuthority

回答我自己的問題

顯然,Spring Security會自動為每個角色名稱添加前綴ROLE_。 因此,在我的數據庫中為每個角色名稱添加ROLE_前綴解決了這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM