我試圖在我的Spring Boot應用程序中設置分層角色,但沒有成功。我已經完成了互聯網上不同地方所說的一切。但是我沒有一個能夠解決這個問題。Spring Boot + Spring Security +分層角色
這是我的SecurityConfig類的代碼。當我在ROLE_ADMIN用戶的應用程序中登錄時,它應該能夠從'/ users'中檢索數據,但目前我收到拒絕訪問異常。如果用戶具有ROLE_USER憑證,則它工作正常。 任何人都可以幫我弄清楚什麼是失敗? 在此先感謝。
@Configuration
@EnableWebMvcSecurity
@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private SigpaUserDetailsService userDetailsService;
@Bean
public RoleHierarchyImpl roleHierarchy() {
RoleHierarchyImpl roleHierarchy = new RoleHierarchyImpl();
roleHierarchy.setHierarchy("ROLE_ADMIN > ROLE_USER");
return roleHierarchy;
}
@Bean
public RoleHierarchyVoter roleVoter() {
return new RoleHierarchyVoter(roleHierarchy());
}
@Bean
public DefaultWebSecurityExpressionHandler expressionHandler(){
DefaultWebSecurityExpressionHandler expressionHandler = new DefaultWebSecurityExpressionHandler();
expressionHandler.setRoleHierarchy(roleHierarchy());
return expressionHandler;
}
@Bean
@SuppressWarnings(value = { "rawtypes" })
public AffirmativeBased accessDecisionManager() {
List<AccessDecisionVoter> decisionVoters = new ArrayList<AccessDecisionVoter>();
WebExpressionVoter webExpressionVoter = new WebExpressionVoter();
webExpressionVoter.setExpressionHandler(expressionHandler());
decisionVoters.add(webExpressionVoter);
decisionVoters.add(roleVoter());
return new AffirmativeBased(decisionVoters);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.accessDecisionManager(accessDecisionManager())
.expressionHandler(expressionHandler())
.antMatchers("https://stackoverflow.com/users/**")
.access("hasRole('ROLE_USER')")
.anyRequest().authenticated();
http
.formLogin()
.loginPage("/login").permitAll()
.and()
.logout()
.permitAll();
}
@Override
protected void configure(AuthenticationManagerBuilder registry)
throws Exception {
registry.userDetailsService(userDetailsService);
}
}
更新:這裏是你的建議更新的代碼,但仍無法工作的。
它不這樣工作。我仍然收到相同的訪問拒絕異常 – Mario 2014-10-30 21:53:04
@Mario嘗試我的更新。 – holmis83 2014-10-31 08:05:37
我昨天已經這麼做了......我不知道爲什麼不工作,因爲我已經盡一切努力沒有取得任何成功。 – Mario 2014-10-31 12:04:57