Tôi đang cố gắng để thiết lập vai trò thứ bậc trong ứng dụng Boot mùa xuân của tôi không thành công. Tôi đã làm tất cả những gì đã được nói ở những nơi khác nhau trên Internet. Nhưng với không ai trong số họ có tôi đã có thể giải quyết vấn đề.Xuân Boot + Xuân An + Cấu trúc Vai trò
Đây là mã của lớp SecurityConfig tôi. Khi tôi đăng nhập vào ứng dụng với một người dùng có ROLE_ADMIN, nó sẽ có thể truy xuất dữ liệu từ '/ users', nhưng hiện tại tôi nhận được một Access Denied Exception. Nếu người dùng có thông tin xác thực ROLE_USER, nó hoạt động tốt. Bất cứ ai có thể giúp tôi tìm ra những gì không thành công? Cảm ơn trước.
@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);
}
}
Cập nhật: Đây là mã cập nhật với đề nghị của bạn, nhưng vẫn không hoạt động.
Nó không hoạt động theo cách đó. Tôi vẫn nhận được cùng một ngoại lệ bị từ chối truy cập – Mario
@Mario Hãy thử cập nhật của tôi. – holmis83
Tôi đã làm điều đó ngày hôm qua rồi ... Tôi không biết tại sao không làm việc vì tôi đã làm mọi thứ có thể mà không thành công. – Mario