Нужно заблокировать доступ к некоторым роутам в зависимости от роли. Пересмотрел около 5-7 гайдов по Spring MVC Security, роуты blog/{id}, blog/new должны быть доступны только админу, однако у меня на эти роуты может заходить любой, даже не авторизованный пользователь.
Авторизация работает правильно, роли подтягиваются в объект principal - проверял отладкой. Пробовал и с hasRole('ROLE_ADMIN'), и c hasAuthority('ROLE_ADMIN') - оба варианта игнорируются.
Думаю, возможно где-то нужно что-то включить, чтобы antMatchers().access() работал?
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
http
.authorizeRequests()
.antMatchers("/", "/blog", "/blog/{id}", "/author", "/account").permitAll()
.antMatchers("/blog/edit/{blogId}", "/blog/new").access("hasAuthority('ROLE_ADMIN')")
.and()
.exceptionHandling().accessDeniedPage("/403")
.and()
//form login, logout
Так проверял наличие ролей у авторизованного пользователя
@GetMapping("/userInfo")
public String getUserInfo(Model model, Principal principal) {
String userName = principal.getName();
System.out.println("User name: " + userName);
User loginUser = (User)((Authentication)principal).getPrincipal();
String userInfo = WebUtils.toString(loginUser); // возвращает роли склеенные через запятую, в данном случае - ROLE_ADMIN
System.out.println(userInfo);
model.addAttribute("userInfo", userInfo);
return "userInfoPage";
}
Тем не менее на защищённые роуты в моём случае может зайти любой, в т.ч. и не авторизованный пользователь - т.е. вообще фильтры на роуты не работают.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости