如何在 Spring Webflux 中自定义 Oauth2 的登录页面?
Posted
技术标签:
【中文标题】如何在 Spring Webflux 中自定义 Oauth2 的登录页面?【英文标题】:How Can I Customize Login Page for Oauth2 in Spring Webflux? 【发布时间】:2021-02-26 05:13:25 【问题描述】:我只想覆盖默认的 oauth2 登录网址 (/login
)。我怎样才能做到这一点?我尝试过的配置没有成功:
@Bean
public SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http)
http
.authorizeExchange().pathMatchers(permittedUrls).permitAll()
.anyExchange().authenticated()
.and()
.oauth2Login(Customizer.withDefaults()).formLogin().loginPage("/oauth2_login")
.authenticationSuccessHandler(this::onAuthenticationSuccess)
.and()
.csrf().disable();
return http.build();
我希望它会重定向到/oauth2_login
url,但它没有用。它仍然重定向到 /login。但这次它返回 404 而不是显示默认登录页面。
【问题讨论】:
【参考方案1】:上面的代码正在为formLogin
定制登录页面,这通常是基于用户名/密码的表单登录。使用新的 lambda 样式方法更容易查看您正在影响的配置,因此我更新了整个配置以使用它。如果要为 oauth2Login 自定义登录页面,则应更改其上的登录页面。例如:
@Bean
public SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http)
http
.authorizeExchange(exchanges -> exchanges
.pathMatchers(permittedUrls).permitAll()
.anyExchange().authenticated()
)
.oauth2Login(oauth2 -> oauth2
// you now must render a log in page for the URL /login
.loginPage("/login")
);
// remove formLogin that was for a username/password based log in
// if you are doing oauth2 login I'm guessing you allow users to work within a browser, so you should not disable csrf
return http.build();
【讨论】:
感谢您的回答,但未编译。 (无法解析“OAuth2LoginSpec”中的方法“loginPage”)以上是关于如何在 Spring Webflux 中自定义 Oauth2 的登录页面?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring WebFlux 上自定义未经授权的响应
如何在 Spring Boot 和 Spring WebFlux 中使用“功能 bean 定义 Kotlin DSL”?
如何在 Spring Boot 1.4 中自定义 Jackson
如何在grails中自定义spring security插件登录页面