【问题标题】:How to disable Keycloak authentication when running a Spring Boot application with a particular Maven profile?使用特定 Maven 配置文件运行 Spring Boot 应用程序时如何禁用 Keycloak 身份验证?
【发布时间】:2021-05-21 07:45:45
【问题描述】:

我有一个minimal Spring Boot based application。它旨在作为开发实际应用程序的模板。也就是说,人们应该克隆这个项目并在其上构建真正的应用程序。

在生产中使用时,应使用 Keycloak 保护端点。在本地开发期间,应禁用此身份验证。

为此,我创建了一个配置文件local-dev 并在pom.xml 中激活它:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <profiles>
                    <profile>local-dev</profile>
                </profiles>
            </configuration>
        </plugin>
    </plugins>
</build>

当使用local-dev 配置文件运行时,应遵循security configuration

@Configuration
@Slf4j
@Profile("local-dev")
public class DevSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        log.warn("Using configuration Dev Security Conf");

        http.authorizeRequests()
                .anyRequest().authenticated()
                .and()
                .httpBasic();

        http.cors();

    }

    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/**");
    }

    @Bean
    @Scope(scopeName = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)
    public AccessToken accessToken() {
        AccessToken accessToken = new AccessToken();
        accessToken.setSubject("abc");
        accessToken.setName("Tester");

        return accessToken;

    }
}

但是,如果

  1. 我使用mvn clean spring-boot:run
  2. 启动应用程序
  3. 在浏览器中打开http://localhost:8092/test/,

我看到以下错误:

java.lang.IllegalArgumentException: You did not supply enough values to fill path parameters
    at org.keycloak.common.util.KeycloakUriBuilder.buildFromValues(KeycloakUriBuilder.java:577) ~[keycloak-common-11.0.2.jar:11.0.2]
    at org.keycloak.common.util.KeycloakUriBuilder.build(KeycloakUriBuilder.java:571) ~[keycloak-common-11.0.2.jar:11.0.2]
    at org.keycloak.adapters.KeycloakDeployment.setAuthServerBaseUrl(KeycloakDeployment.java:142) ~[keycloak-adapter-core-11.0.2.jar:11.0.2]
    at org.keycloak.adapters.KeycloakDeploymentBuilder.internalBuild(KeycloakDeploymentBuilder.java:139) ~[keycloak-adapter-core-11.0.2.jar:11.0.2]
    at org.keycloak.adapters.KeycloakDeploymentBuilder.build(KeycloakDeploymentBuilder.java:202) ~[keycloak-adapter-core-11.0.2.jar:11.0.2]

这意味着 Keycloak 没有完全关闭。

如何确保在使用 local-dev 配置文件运行应用程序时禁用 Keycloak?

a similar question 的大多数答案都没有帮助。

更新 1:我按以下方式更改了代码:

  1. 已移除
autoconfigure:
exclude = org.keycloak.adapters.springboot.KeycloakAutoConfiguration

来自application-local-dev.yml

  1. 已移除
security.basic.enabled: false
management.security.enabled: false

来自application-local-dev.yml

  1. 已添加
keycloak:
enabled: false

application-local-dev.yml

此后Keycloak相关异常消失,浏览器错误提示改为

Whitelabel Error Page

This application has no explicit mapping for /error, so you 
are seeing this as a fallback.
Fri Feb 19 09:59:11 CET 2021
There was an unexpected error (type=Not Found, status=404).

【问题讨论】:

  • 注意:不要将 Maven Profiles 与 Spring Profiles 混淆。它们是 2 个不同的概念。
  • 你知道如何解决这个问题吗?

标签: java spring spring-boot keycloak maven-profiles


【解决方案1】:

我个人所做的就是在项目本身中不包含任何安全性或其他配置,我只是在 CICD 过程中从 GitLab 环境变量中包含它们或从其他路径/存储库中获取它们。因此,在我的情况下,所有应用程序/微服务都在开箱即用的非安全模式下运行,以使开发人员更容易。

【讨论】:

    猜你喜欢
    • 2019-05-31
    • 2019-01-13
    • 2019-01-14
    • 1970-01-01
    • 2021-06-24
    • 2018-06-15
    • 2020-09-01
    • 2019-07-09
    • 2018-04-15
    相关资源
    最近更新 更多