Я получаю 403 на каждый запрос с шаблоном /admin Мне нужно ограничить /admin только для роли администратора.
Неудачный подход:
@PreAuthorize(hasRole('ADMIN')) и @PreAuthorize(hasRole('ROLE_ADMIN')) на контроллере, но безуспешно.@PreAuthorize из контроллера и добавить шаблон в класс ниже с помощью hasRole, но безуспешно.Ниже класс расширяется WebSecurityConfigurerAdapter
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter{
@Autowired
AuthenticationEntryPoint authenticationEntryPoint;
@Override
protected void configure(HttpSecurity httpSecurity) throws Exception {
httpSecurity
.exceptionHandling()
.authenticationEntryPoint(authenticationEntryPoint)
.and()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.antMatchers(HttpMethod.OPTIONS).permitAll()
.antMatchers(HttpMethod.GET,"/admin/**").hasAnyRole("ADMIN","ADMIN_TENANT")
.anyRequest().authenticated()
.and()
.logout()
.permitAll()
.and()
.csrf()
.disable();
httpSecurity.
addFilterBefore(authenticationTokenFilterBean(), UsernamePasswordAuthenticationFilter.class);
httpSecurity.
headers().cacheControl().disable();
}
Уже пробовал решения, упомянутые в подобном вопросе, но не повезло. Поэтому, пожалуйста, не отмечайте его как дубликат.
Да, при удалении /admin из antmatchers я могу получить к нему доступ, но мне нужна авторизация.
Можете ли вы использовать свои antmatchers, например, "antMatchers("/admin/**").access("hasRole('ADMIN')") "?
изменить hasAnyrole на hasAnyAuthority
Также попытался изменить его на hasAnyAuthority, но это не сработало.




@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter{
@Autowired
AuthenticationEntryPoint authenticationEntryPoint;
@Override
protected void configure(HttpSecurity httpSecurity) throws Exception {
httpSecurity
.exceptionHandling()
.authenticationEntryPoint(authenticationEntryPoint)
.and()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.antMatchers(HttpMethod.OPTIONS).permitAll()
.antMatchers(HttpMethod.GET,"/admin/**").hasAnyRole("ADMIN","ADMIN_TENANT") // change hasAnyrole to hasAnyAuthority
.anyRequest().authenticated()
.and()
.logout()
.permitAll()
.and()
.csrf()
.disable();
httpSecurity.
addFilterBefore(authenticationTokenFilterBean(), UsernamePasswordAuthenticationFilter.class);
httpSecurity.
headers().cacheControl().disable();
}
почему, потому что если вы используете метод hasAnyRole, он автоматически добавит Role_ ко всем вещам, упомянутым в hasAnyRole
Мой похожий проект Git: здесь
// Config to check if already active
http.authorizeRequests()
.and()
.rememberMe()
.tokenRepository(new JdbcTokenRepositoryImpl().setDataSource(//datasource_name) )
.tokenValiditySeconds(//TimeInterval in sec);
}
Можете ли вы получить доступ к запросам, связанным с /admin, когда вы полностью удалите авторизацию? а также удалить HttpMethod.GET из антматчеров и проверить