Vaadin LoginForm Failure Handler中断登录?错误的URL



我在Spring Boot项目中使用带有Spring Security的Vaadin LoginForm。默认情况下,如果身份验证因任何原因失败,它将重定向到/login?error。我想对某些失败进行重定向,特别是如果用户还没有验证他们的电子邮件。我试图使用failureHandler功能来做到这一点,但是一旦我创建一个,/login?errorURL突然要求用户进行身份验证,而/login功能正常。

我的登录视图:

@PageTitle("Login")
@Route("login", layout = MainLayout::class)
class LoginView : VerticalLayout(), BeforeEnterObserver {
private val loginForm: LoginForm
init {
alignItems = FlexComponent.Alignment.CENTER
className = "login-view"
width = LumoUtility.Width.AUTO

loginForm = loginForm { action = "login" }
button("Register") {
onLeftClick { ui.ifPresent { it.navigate("register")} }
}
}
override fun beforeEnter(beforeEnterEvent: BeforeEnterEvent) {
if (beforeEnterEvent.location.queryParameters.parameters.containsKey("error")) {
loginForm.isError = true
}
}
}

我的安全配置:

@Configuration
@EnableWebSecurity
class SecurityConfiguration : VaadinWebSecurityConfigurerAdapter() {
@Throws(Exception::class)
override fun configure(http: HttpSecurity) {
http.formLogin()
.failureHandler(object : SimpleUrlAuthenticationFailureHandler() {
override fun onAuthenticationFailure(
request: HttpServletRequest?,
response: HttpServletResponse?,
exception: AuthenticationException?
) {
super.onAuthenticationFailure(request, response, exception)
}
})
super.configure(http)
setLoginView(http, LoginView::class.java)
}

正如您所看到的,我所做的只是在我的安全配置函数中添加了一个failureHandler,它只是调用默认的failureHandler,但这足以破坏/login?error。如果我删除那个failureHandler,那么它就会像预期的那样工作,并在登录失败时显示/login?errorURL。我怎么让它工作?

设置failureHandler覆盖了简单重定向到/login?error的默认值(并自动将此URL配置为不需要身份验证)。查看代码,您只能有一个AuthenticationFailureHandler

相关内容

  • 没有找到相关文章

最新更新