gpt4 book ai didi

java - 在 Spring Security 获得机会之前创建一个处理请求的 Vaadin 请求处理程序

转载 作者:行者123 更新时间:2023-11-30 12:05:29 25 4
gpt4 key购买 nike

所以我们的目标是将应用程序从 Thorntail 迁移到 Spring Boot。

一个问题是我们使用 Vaadin 8 是出于遗留原因。

该应用程序提供无密码登录支持(如通过链接登录)。

现在 vaadin 是一个单页框架,所以我们拆分出了 /login/passwordless登录选项进入他们自己的 s.t. 的 Vaadin 用户界面。我们可以配置

override fun configure(http: HttpSecurity) {
http
.csrf().disable()
.httpBasic().disable()
.formLogin().disable()
.authorizeRequests()
.antMatchers("/login").anonymous()
.antMatchers("/passwordless/**").permitAll()
.antMatchers("/vaadinServlet/UIDL/**").permitAll()
.antMatchers("/vaadinServlet/HEARTBEAT/**").permitAll()
.anyRequest().authenticated()
.and()
.logout()
.addLogoutHandler(logoutHandler())
.logoutUrl("/logout")
.logoutSuccessUrl("/login?goodbye").permitAll()
.and()
.exceptionHandling()
.authenticationEntryPoint(LoginUrlAuthenticationEntryPoint("/login"))
}

不幸的是,为了向后兼容,我们还必须支持已经分发的旧链接。旧的登录链接设置为

/#!passwordless/<login-token>

这意味着即使我们添加过滤器,我们也无法将请求与任何其他请求区分开来 / .

目前,除了允许对 / 的未经身份验证的请求外,我们没有其他选择。如果用户未通过身份验证,则手动重定向到登录页面,这非常难看。

我们能否在 Spring-security 将我们重定向到 /#!passwordless/<login-token> 之前以某种方式定义一个 vaadin 请求处理程序(它确实可以访问 vaadin 位置 <login-token>,因此可以读取 /passwordless/<login-token> 并重定向到 /login) ?

最佳答案

由于哈希不包含在 HTTP 请求中,因此在发送响应之前不可能在服务器上拥有它。

也许您可以配置一个过滤器来拦截对 / 的所有请求.如果用户通过身份验证,它什么都不做。否则,它要么重定向到另一个包含一些 JavaScript 的页面,要么直接返回一些 JavaScript,检查哈希并在客户端重定向到 /login。或 /passwordless/<login-token> .

我想这基本上就是您所说的丑陋,但只要该过滤器到位,它就应该不是问题。

编辑:另一种方法是,如果将哈希转发到登录页面,您可以在登录页面本身包含一段 JavaScript,用于检查哈希是否存在并适本地重定向。

关于java - 在 Spring Security 获得机会之前创建一个处理请求的 Vaadin 请求处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56260012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com