首页 > 解决方案 > 我想更改 Spring Boot Admin 中默认按钮的注销 URL,仅此而已

问题描述

更改 Spring Boot Admin 的默认注销行为的最佳方法是什么?目前,其他一切都运行良好。我正在使用 OAuth2 安全提供程序,并且登录工作正常。目前我对所有东西都使用标准的 Spring Boot Admin 默认值,除了我的 application.properties 看起来像这样:

spring.cloud.kubernetes.discovery.all-namespaces=false

spring.security.oauth2.client.provider.---.jwk-set-uri=https://...
spring.security.oauth2.client.provider.---.issuer-uri=https://...

spring.security.oauth2.client.registration.---.client-id=client-id
spring.security.oauth2.client.registration.---.client-secret=secrect
spring.security.oauth2.client.registration.---.client-name=client-name
spring.security.oauth2.client.registration.---.scope=openid,client-name

注销按钮当前执行对 base_path/logout 的 POST 请求,该请求以 403 失败。(Sidetrack:如果它是 GET,它将成功注销 Spring Boot Admin,但这并不是我想要的,因为它不会注销安全提供者。)我想要的是它引导我到我的 OAuth2 安全提供者的注销 url。

除了注销按钮将我引导到的 url 之外,最好的方法是什么?

我已经尝试了一些东西,(尽管我认为大多数东西都不起作用,因为它们不起作用),包括

@Configuration
public class SBAdminSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {

        http.logout(logout -> logout.logoutUrl(
                "{oauth2 logout URL placeholder}?post_logout_redirect_uri={sba base url placeholder}%2Flogout"));

    }
}

这不起作用,因为它删除了所有其他安全配置,包括已经在幕后配置的任何默认 WebSecurityConfigurerAdapter。有了这个,当我尝试去我的 Spring Boot Admin 应用程序时,根本没有安全性。

我怀疑解决此问题的一种方法是将导入的库正在执行的任何现有配置复制到我自己的 WebSecurityConfigurerAdapter 中并稍微编辑它以更改注销 URL。但是,我无法找到任何东西来告诉我这个现有配置在哪里或它可能是什么。

标签: spring-boot-admin

解决方案


一种方法是先从 Spring Boot 应用程序注销,然后将注销成功 url 重定向到 OAuth2 安全提供程序注销 url。

示例配置

@Configuration
public class ProjectConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.logout()
            .logoutSuccessUrl("/oauth2/logouturl/here");
    }
}

推荐阅读