Я пытаюсь добавить иерархию ролей в мое весеннее приложение безопасности. Я использовал эту конфигурацию.
@Configuration
@ComponentScan (basePackages = "com.medkhelifi.security")
public class JwtSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
JwtTokenProvider jwtTokenProvider;
@Bean
@Override
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}
@Bean
public AffirmativeBased getAccessDecisionManager() {
DefaultWebSecurityExpressionHandler expressionHandler = new DefaultWebSecurityExpressionHandler();
expressionHandler.setDefaultRolePrefix("");
expressionHandler.setRoleHierarchy(roleHierarchy());
WebExpressionVoter webExpressionVoter = new WebExpressionVoter();
webExpressionVoter.setExpressionHandler(expressionHandler);
List<AccessDecisionVoter<? extends Object>> voters = new ArrayList<>();
voters.add(webExpressionVoter);
return new AffirmativeBased(voters);
}
@Bean
public RoleHierarchyImpl roleHierarchy (){
RoleHierarchyImpl roleHierarchy = new RoleHierarchyImpl();
roleHierarchy.setHierarchy("ROLE_ADMIN > ROLE_USER");
return roleHierarchy;
};
public JwtSecurityConfig(){
}
@Override
protected void configure(HttpSecurity http) throws Exception {
//@formatter:off
http
.httpBasic().disable()
.csrf().disable()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.accessDecisionManager(getAccessDecisionManager())
.antMatchers("/auth/**").permitAll()
.anyRequest().authenticated()
.and()
.apply(new JwtConfigurer(jwtTokenProvider));
//@formatter:on
}
}
Идея состоит в том, чтобы добавить ROLE_USER в иерархию ROLE_ADMIN, но она не работает, когда я пытаюсь применить защищеннуюROLE_USER к одному из моих запросов
@RequestMapping(method = RequestMethod.GET)
@Secured("ROLE_USER")
public String index(Principal principal){
return userRepository.findByEmail("admin@gmail.com").toString();
}
Я получаю 403 Запрещенную ошибку, но когда я заменяю @Secured ("ROLE_USER") на @Secured ("ROLE_ADMIN"), это работает очень хорошо.