#spring #spring-boot #spring-mvc #spring-security
#spring #весенняя загрузка #spring-mvc #spring-безопасность
Вопрос:
У меня есть сайт spring boot / mvc, использующий spring security. Я должен использовать способы входа в систему, в панели навигации, присутствующей на каждой странице, и на странице входа, на которую вы перенаправляетесь при попытке доступа к ограниченному ресурсу.
Для панели навигации я бы хотел, чтобы пользователь оставался на странице после успешного входа в систему, для страницы входа я бы хотел, чтобы пользователь перенаправлялся на ресурс, к которому он пытался получить первоначальный доступ после входа в систему.
Я могу выполнять каждую функциональность по отдельности, первый вариант использования обрабатывается:
SimpleUrlAuthenticationSuccessHandler handler = new SimpleUrlAuthenticationSuccessHandler();
handler.setUseReferer(true);
Второй случай — это функциональность по умолчанию.
Но я не смог заставить их работать оба.
У кого-нибудь есть идеи о том, как этого добиться?
Ответ №1:
Вы можете настроить каждую страницу входа с помощью другого обработчика AuthenticationSuccessHandler, как описано здесьhttps://www.baeldung.com/spring_redirect_after_login
Нравится:
@Override
protected void configure(final HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/anonymous*").anonymous()
.antMatchers("/login*").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login.html")
.loginProcessingUrl("/login")
.successHandler(myAuthenticationSuccessHandler())
.and()
.formLogin()
.loginPage("/login2.html")
.loginProcessingUrl("/login2")
.successHandler(mySecondAuthenticationSuccessHandler())
// ...
}
Комментарии:
1. Допустим, у меня была страница входа в систему «/login» и «/ home», я хотел, чтобы «/ home» использовал обработчик успеха клиента, а «/ login» — функциональность по умолчанию. Я бы сделал
and() .formLogin() .loginPage("/login.html") .loginProcessingUrl("/login") .and() .formLogin() .loginPage("/home") .loginProcessingUrl("/home") .successHandler(myCustomSuccessHandler());
, потому что кажется, что пользовательский обработчик успеха используется для всего