使用基本身份验证配置 Spring Boot 的嵌入式 tomcat 容器
Posted
技术标签:
【中文标题】使用基本身份验证配置 Spring Boot 的嵌入式 tomcat 容器【英文标题】:Configuring Spring Boot's embedded tomcat container with basic auth 【发布时间】:2018-03-28 05:46:50 【问题描述】:我使用的是 Spring Boot 1.5.7,没有 Spring Security。我的目标是试验嵌入式 tomcat 容器并启用基本身份验证。
这是我所拥有的:
@Bean
public EmbeddedServletContainerFactory servletContainer()
final TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
tomcat.addContextCustomizers(ctx ->
String AUTH_ROLE = "admin";
LoginConfig config = new LoginConfig();
config.setAuthMethod("BASIC");
ctx.setLoginConfig(config);
ctx.addSecurityRole(AUTH_ROLE);
SecurityConstraint constraint = new SecurityConstraint();
constraint.addAuthRole(AUTH_ROLE);
SecurityCollection collection = new SecurityCollection();
collection.addPattern("/*");
constraint.addCollection(collection);
ctx.addConstraint(constraint);
);
return tomcat;
这似乎没有任何效果。这种事情是否可以通过 Spring Boot 以编程方式实现,或者只能通过 web.xml 之类的方式完成?
PS:*** 上有许多帖子详细介绍了涉及 Spring Security 项目的各种解决方案和替代方案。我应该在这里再次强调,我想知道是否有办法在不涉及该库的情况下解决这个问题。
【问题讨论】:
【参考方案1】:你的配置不错,但是需要在工厂中添加一个Basic authenticationator Valve:
final TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
tomcat.addContextValves(new BasicAuthenticator());
tomcat.addContextCustomizers(....
【讨论】:
太棒了。非常感谢您的洞察力。 @b0c1 刚刚利用上述技巧让我的基于证书的身份验证在 tomcat 中工作。如果您能推荐一个地方,我很想知道在哪里可以找到上述记录?很高兴知道为什么我在做什么......有效!以上是关于使用基本身份验证配置 Spring Boot 的嵌入式 tomcat 容器的主要内容,如果未能解决你的问题,请参考以下文章
spring-boot 在单个 Web 应用程序路径上设置基本身份验证?
Spring boot 2.1.x 如何使用基本身份验证保护执行器端点
基本身份验证在Spring-Boot WS Soap服务中不起作用