使用基本身份验证配置 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服务中不起作用

如何在 Spring Boot 中使用 RESTful 和基本身份验证

Angular 基本身份验证 Spring Boot

具有基本身份验证和自定义 UserDetailsS​​ervice 的 Spring Boot OAuth2