[英]How to configure multiple HttpSecurity with UserDetailsService using spring boot 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)
。
因此,您可以使用hasAuthority
或hasAnyAuthority
顯然,Spring Security會自動為每個角色名稱添加前綴ROLE_。 因此,在我的數據庫中為每個角色名稱添加ROLE_前綴解決了這個問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.