Весна безопасности RoleHiearchy не работает - PullRequest
0 голосов
/ 25 апреля 2019

Я пытаюсь добавить иерархию ролей в мое весеннее приложение безопасности. Я использовал эту конфигурацию.

@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"), это работает очень хорошо.

...