You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Spring Boot代码实现HTTP转HTTPS但排除Admin页面

实现管理员页面保留HTTP,其他页面强制HTTPS的方案

你的当前配置是对所有路径(/*)强制重定向到HTTPS,要实现管理员页面例外,只需要调整Tomcat的SecurityConstraint规则,拆分路径匹配逻辑即可:

修改后的完整配置代码

@Configuration
@EnableConfigurationProperties
public class SSLConfig {

    @Value("${server.port.http}")
    private int httpPort;

    @Value("${server.port}")
    private int httpsPort;

    @Bean
    public ServletWebServerFactory serverFactory(){
        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
            @Override
            protected void postProcessContext(Context context) {
                // 规则1:非管理员路径强制HTTPS
                SecurityConstraint secureConstraint = new SecurityConstraint();
                secureConstraint.setUserConstraint("CONFIDENTIAL");
                SecurityCollection secureCollection = new SecurityCollection();
                secureCollection.addPattern("/*");
                // 排除管理员路径
                secureCollection.addExcludedPattern("/admin/**");
                secureConstraint.addCollection(secureCollection);
                context.addConstraint(secureConstraint);

                // 规则2:管理员路径允许HTTP(不强制重定向)
                SecurityConstraint adminConstraint = new SecurityConstraint();
                adminConstraint.setUserConstraint("NONE");
                SecurityCollection adminCollection = new SecurityCollection();
                adminCollection.addPattern("/admin/**");
                adminConstraint.addCollection(adminCollection);
                context.addConstraint(adminConstraint);
            }
        };

        tomcat.addAdditionalTomcatConnectors(createSslConnector());
        return tomcat;
    }

    private Connector createSslConnector(){
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setPort(httpPort);
        connector.setScheme("http");
        connector.setSecure(false);
        connector.setRedirectPort(httpsPort);
        return connector;
    }
}

关键改动说明

  • 拆分了两组SecurityConstraint和SecurityCollection:
    1. 第一组对所有路径(/*)设置CONFIDENTIAL(强制HTTPS),同时通过addExcludedPattern排除/admin/**路径
    2. 第二组专门对/admin/**路径设置NONE,表示不要求加密,允许直接通过HTTP访问
  • Tomcat的路径匹配规则会优先匹配更具体的路径模式,所以/admin/**的规则会覆盖通用的/*规则,确保管理员页面不会被重定向

注意事项

  • 确保你的application.properties(或yaml)中正确配置了两个端口:
    server.port=443 # HTTPS端口
    server.port.http=80 # HTTP端口
    
  • 如果管理员页面的路径不是/admin/**,请根据实际路径调整addPattern和addExcludedPattern中的值

内容的提问来源于stack exchange,提问作者최범진

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 22:35:27