Как правильно настроить Spring Security, чтобы срабатывала при нажатии определенной кнопки?
Есть проект, в котором надо настроить security так, чтобы при переходе на другую html страницу выкидывалась форма логина, встроенная spring security, если это возможно, конечно - если нет, то подскажите другое решение - хочу закрыть отдельную страницу для входа только через логин. В ("/**") в конфиге сделал так, чтобы корень проекта открывался без авторизации, а вот чтобы на следующую страницу перейти, хочу сделать доступ через логин-пароль. Хотелось бы через базовую форму - из коробки, подскажите, пожалуйста. Сделал anyRequest().authenticated() - не срабатывает, хотя на следующей странице производятся get запросы через контроллер, но увы. Использую vue js и java springboot.
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.antMatchers("/**").permitAll()
.anyRequest().authenticated().and().formLogin();
}
Ответы (2 шт):
Во первых на форму логина надо добавить адрес и разрешения
.formLogin().loginPage("/login").permitAll()
Во вторых, с учётом коментария, требуются особые права на "/moderation". Это можно осуществить добавлением роли (например ADMIN):
authorizeRequest()
.antMatchers("/").permitAll()
.antMatchers("/moderation/**").access("hasAuthority('ADMIN')")
.anyRequest().authenticated()
Вот пример, показывающий как можно использовать Spring Security для вэб-приложения.
Вобщем сделал так, отпраляю username и password напрямую с кастомной login.html на контроллер - дальше в сервисе сопоставляю пароли, в моем случае через bcryptpasswordencoder.matches, дальше если true - то контроллер возвращает другую html страницу, к которой нужен доступ через login, в противном случае - возврат на прежнюю страницу с ошибкой.