Spring Security не работает должным образом - PullRequest
0 голосов
/ 18 мая 2018
  @Override
protected void configure(HttpSecurity http) throws Exception {
    http
            .authorizeRequests()
            .antMatchers("/entrysheet/**").permitAll()//.hasRole("USER")
            .antMatchers("/users/**").hasRole("ADMIN") //Needs to be first
            .anyRequest().authenticated()
    ;
}


@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

@Autowired
UsersRepository usersRepository;

@Bean
public UserDetailsService userDetailsService() {
    System.out.println("fdsfdsfsd");
    InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
    usersRepository.findAll().forEach(users -> {
        UserDetails userDetails = User.withUsername(users.getUsername()).password(users.getPassword())
                .roles((users.getIdRole() != null && users.getIdRole() == 1) ? "ADMIN" : "USER").build();
        System.out.println(userDetails.getUsername() + " " + userDetails.getPassword() +
                userDetails.getAuthorities());

        manager.createUser(userDetails);
            }
    );

    return manager;
}


@Override
protected void configure(HttpSecurity http) throws Exception {
    http
            .authorizeRequests()
           //.antMatchers("/entrysheet/**").permitAll().anyRequest().authenticated()//.hasRole("USER")
           //.antMatchers("/users/**").hasRole("ADMIN") //Needs to be first
            .antMatchers("/", "/**").permitAll() //Permit all other roles to all other paths
            .anyRequest().authenticated()

            //.authorizeRequests()
            //.antMatchers("/entrysheet/**").permitAll()//.hasRole("USER")
            //.antMatchers("/users/**").hasRole("ADMIN") //Needs to be first
            //.anyRequest().authenticated()


    ;
}

}

Вот моя конфигурация.Но кажется, что / users / не может быть доступен никому.

Всякий раз, когда я добавляю ".hasRole (" RoleName ")", он просто запрещает доступ к этой роли.Я получаю {"отметку времени": 1526671066818, "статус": 403, "ошибка": "Запрещено", "сообщение": "Доступ запрещен", "путь": "/ users"}

из этого.

Я хочу, чтобы некоторые запросы были разрешены только «USER», например: «/ entrysheet», «/ datasheet» и т. Д., В то время как «/ users» доступен только «ADMIN»

1 Ответ

0 голосов
/ 18 мая 2018

Вы должны быть осторожны между обоими

 hasRole([role])

Возвращает true, если текущий участник имеет указанную роль.По умолчанию, если предоставленная роль не начинается с 'ROLE_', она будет добавлена.Это можно настроить, изменив defaultRolePrefix в DefaultWebSecurityExpressionHandler.

или

hasAuthority([authority])

Возвращает значение true, если текущий участник имеет указанные права доступа

первый добавит по умолчанию "ROLE_" к указанному значению

Так что я бы изменил на hasAuthority

Документация

...