如何修改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:- 第一组对所有路径(
/*)设置CONFIDENTIAL(强制HTTPS),同时通过addExcludedPattern排除/admin/**路径 - 第二组专门对
/admin/**路径设置NONE,表示不要求加密,允许直接通过HTTP访问
- 第一组对所有路径(
- Tomcat的路径匹配规则会优先匹配更具体的路径模式,所以
/admin/**的规则会覆盖通用的/*规则,确保管理员页面不会被重定向
注意事项
- 确保你的
application.properties(或yaml)中正确配置了两个端口:server.port=443 # HTTPS端口 server.port.http=80 # HTTP端口 - 如果管理员页面的路径不是
/admin/**,请根据实际路径调整addPattern和addExcludedPattern中的值
内容的提问来源于stack exchange,提问作者최범진
相关产品推荐
相关产品推荐

