【发布时间】: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;
}
}
但是,如果
- 我使用
mvn clean spring-boot:run和 启动应用程序
- 在浏览器中打开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:我按以下方式更改了代码:
- 已移除
autoconfigure:
exclude = org.keycloak.adapters.springboot.KeycloakAutoConfiguration
来自application-local-dev.yml。
- 已移除
security.basic.enabled: false
management.security.enabled: false
来自application-local-dev.yml。
- 已添加
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