Spring Security - 403 запрещено для всех ролей, кроме ROLE_USER - PullRequest
0 голосов
/ 27 мая 2020

Я создаю приложение, использующее ограничение на основе ролей для определенных конечных точек REST.

У меня есть таблица ролей, таблица user_roles и таблица пользователей.

ROLE_USER работает нормально, и пользователи с этой ролью могут успешно получить доступ к своим страницам. Даже если я поменяю его местами, чтобы только ROLE_USER мог получить доступ к / admin / **, он работает.

Однако, когда я пытаюсь использовать ROLE_ADMIN на странице администратора, он никогда не работает. Он всегда перенаправляет меня на запрещенную страницу 403

Конфигурация безопасности:

    @Bean
DaoAuthenticationProvider provider() {
    DaoAuthenticationProvider provider = new DaoAuthenticationProvider();
    provider.setUserDetailsService(userDetailsServiceImpl);
    provider.setPasswordEncoder(passwordEncoder);
    return provider;
}

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.authenticationProvider(provider());
}


@Override
protected void configure(HttpSecurity http) throws Exception {
    http.csrf().disable().authorizeRequests()
        .antMatchers("/banking/**").hasAnyRole("USER", "ADMIN")
        .antMatchers(HttpMethod.GET, "/admin/**").hasRole("ADMIN")
        .and()
        .formLogin().loginPage("/login").permitAll()
        .and()
        .logout().permitAll()
        .and()
        .exceptionHandling().accessDeniedPage("/403");
}

}

MyUserDetails:

public class MyUserDetails implements UserDetails {

private static final long serialVersionUID = -2067381432706760538L;

private User user;

public MyUserDetails(User user) {
    this.user = user;
}

@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
    Set<Role> roles = user.getRoles();
    List<SimpleGrantedAuthority> authorities = new ArrayList<>();

    for (Role role : roles) {
        authorities.add(new SimpleGrantedAuthority("ROLE_" + role.getName()));
    }

    return authorities;
}

UserDetailsServiceImpl:

public class UserDetailsServiceImpl implements UserDetailsService {

@Autowired
private UserService userService;

@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
    User user = userService.findByUsername(username);

    if(user == null) {
        throw new UsernameNotFoundException("User not found");
    }

    return new MyUserDetails(user);
}

} ​​

Был бы признателен за любую помощь, так как я застрял на этом некоторое время. Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...