我希望自定义我的oauth2登录页面。我正在使用Spring云网关,所以这是Spring安全Webflux。这应该是相当直接的,但我不能想出一个方法来做与Webflux安全。我尝试过的东西:
- 我已经尝试使用loginPage()建议在如何在Spring Webflux中自定义Oauth2登录页面?但正如O.P.在那里发布的,这在webflux中无法编译世界。
- 我试过在/login放一个控制器,让它直接到我的自定义页面,但控制器没有命中。我的安全配置:
@Bean
public SecurityWebFilterChain configure(ServerHttpSecurity http) throws Exception {
return http
.csrf().disable().authorizeExchange()
.pathMatchers(HttpMethod.GET,"/oauth2login",
"*/*.js", "/*.json", "/*.ico", "/login").permitAll()
.pathMatchers("/api/","/api/**").authenticated()
.and().oauth2ResourceServer(ServerHttpSecurity.OAuth2ResourceServerSpec::jwt)
.authorizeExchange().anyExchange().authenticated()
.and().securityContextRepository(new WebSessionServerSecurityContextRepository())
.oauth2Login()
.and().build();
}
我在这里做错了什么?
这有点令人困惑,因为根据您在基于servlet的应用程序中配置的身份验证类型,有多种不同的方法来定制登录页面。
在响应式应用程序中,它已经集中在一个地方(DSL中的exceptionHandling()
),因此您可以简单地设置身份验证入口点,如下面的示例所示:
.exceptionHandling(exceptions -> exceptions
.authenticationEntryPoint(new RedirectServerAuthenticationEntryPoint("/login"))
)
这会禁用默认的登录页面,你只需要提供你自己的,应该匹配配置的URL。