SpringBoot Security antMatchers не работают в паре
Элементарная задача.
Мучаюсь третий день. Что только не пробовал. Настраиваю ConfigSecurity.
Мне нужно, чтобы ADMIN имел доступ ко всем урлам API. А DOCTOR имел доступ только к api/person/.
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.antMatchers("/", "/css", "/js").permitAll()
.antMatchers("/api/**").hasRole(ADMIN.name())
.antMatchers("/api/person/**").hasRole(DOCTOR.name())
.anyRequest()
.authenticated()
.and()
.httpBasic();
}
Эти два antMatchers как ни крути не работают в паре!!!!
Если первым стоит
.antMatchers("/api/**").hasRole(ADMIN.name())
То ДОКТОР ничего не видит - "status": 403,
А вот АДМИН всё видит прекрасно.
Меняю их местами
.antMatchers("/api/person/**").hasRole(DOCTOR.name())
.antMatchers("/api/**").hasRole(ADMIN.name())
Доктор видит своих персонов, а вот АДМИН уже не видит тех же персонов - "status": 403.
Другие урлы ADMIN из API видит без проблем.
ГДе моя ошибка?
Ответы (1 шт):
Попробуйте вместо .hasRole(ADMIN.name()) использовать .hasAuthority("ADMIN");
То есть попробуйте реализовать в вашей программе следующий вариант:
.antMatchers("/api/person/**").hasAuthority("DOCTOR")
.antMatchers("/api/**").hasAuthority("ADMIN")