Spring boot 我是否可以配置KeyClope Spring引导适配器,以便即使在不满足';你不需要授权吗?

Spring boot 我是否可以配置KeyClope Spring引导适配器,以便即使在不满足';你不需要授权吗?,spring-boot,keycloak,Spring Boot,Keycloak,如果我有一个端点,该端点应该是公开可用的,但如果您登录,其行为会有所不同,那么我不能在我的应用程序配置的安全约束部分中指定它(否则,如果我没有登录,我根本无法到达端点)。但是如果没有在那里列出,用户主体永远不会在请求中填充,即使授权头中提供了有效的承载令牌 有没有办法通过基本的Spring引导适配器获得我想要的行为?如果不是的话,我可能会更幸运地使用Spring安全适配器吗?解决方案是在Tomcat上下文中启用抢占式身份验证。假设您正在使用嵌入式服务器进行部署,则可以实现WebServerFac

如果我有一个端点,该端点应该是公开可用的,但如果您登录,其行为会有所不同,那么我不能在我的应用程序配置的
安全约束
部分中指定它(否则,如果我没有登录,我根本无法到达端点)。但是如果没有在那里列出,用户主体永远不会在请求中填充,即使授权头中提供了有效的承载令牌


有没有办法通过基本的Spring引导适配器获得我想要的行为?如果不是的话,我可能会更幸运地使用Spring安全适配器吗?

解决方案是在Tomcat上下文中启用抢占式身份验证。假设您正在使用嵌入式服务器进行部署,则可以实现
WebServerFactoryCustomizer
,如下所示:

import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
导入org.springframework.boot.web.server.WebServerFactoryCustomizer;
导入org.springframework.stereotype.Component;
@组成部分
公共类抢占AuthWebServerCustomizer实现WebServerFactoryCustomizer
{
@凌驾
public void定制(最终TomcatServletWebServerFactory工厂)
{
addContextCustomizers(context->context.setPreemptiveAuthentication(true));
}
}    
现在,如果一个请求发送了一个授权头,它将始终被处理,即使该请求没有显式地位于需要授权的路径后面