Перемещение Spring Безопасность в конфигурацию Java, где выполняется проверка подлинности-success-handler-ref?
Наше приложение имеет специальный обработчик успеха для успешных логинов. Он в основном перенаправляет их на страницу, на которой они были, когда их сеанс истек.
Мы переходим к конфигурации Java, а не к конфигурации spring xml. Остальная часть конфигурации прошла очень плавно, но мы не можем найти, куда помещать атрибут аутентификации-success-handler-ref в тег безопасности: form-login.
<security:http auto-config='true'>
...
<security:intercept-url pattern="/**" access="IS_AUTHENTICATED_FULLY"/>
<security:form-login login-page="/login" default-target-url="/sites"
authentication-failure-url="/login"
authentication-success-handler-ref="authenticationSuccessHandler"/>
...
Здесь наш конфиг.
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.failureUrl("/login")
.and()
.logout()
.permitAll()
.and()
}
Кроме того, мы не можем найти, куда поставить default-target-url, но это определенно менее важно.
Предостережение, мы на самом деле используем Groovy, но код в основном такой же, как и для конфигурации Java.
Ответы
Ответ 1
Все настройки могут быть выполнены внутри глобального метода настройки. Добавьте следующее:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.defaultSuccessUrl("/sites")
.failureUrl("/login")
.successHandler(yourSuccessHandlerBean) // autowired or defined below
.and()
.logout()
.permitAll()
.and()
}
Ответ 2
Вам нужно создать bean расширение SimpleUrlAuthenticationSuccessHandler
или SavedRequestAwareAuthenticationSuccessHandler
. Например:
@Bean
public SavedRequestAwareAuthenticationSuccessHandler successHandler() {
SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
successHandler.setTargetUrlParameter("/secure/");
return successHandler;
}
Затем вам нужно настроить его на bean, расширяя AbstractAuthenticationProcessingFilter
:
UsernamePasswordAuthenticationFilter authenticationFilter = new UsernamePasswordAuthenticationFilter();
authenticationFilter.setAuthenticationSuccessHandler(successHandler());