spring-boot实现访问http跳转到https端口的方法
2017-05-02 23:43
1411 查看
实现访问服务器地址(默认http的80)跳转到https端口(443)
在application.properties中
这个命令需要交互输入一些密码以及组织的相关信息,这些信息再后面的配置中会使用到
会生成一个名为keystore.p12的文件,这个文件就是我们需要使用的文件,将其放置到resources目录下
在application.properties中配置
这个是使用内置的tomcat做容器的配置方式,使用jetty需要使用另外的方式
由于没有使用jetty,所以没有进行验证
开启端口监听
因为https默认是443端口,需要开启对443端口的监听在application.properties中
#web监听端口 server.port = 443
配置ssl证书
由于没有从相关机构申请证书,使用jdk自带的证书管理工具进行生成,方法如下keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 3650
这个命令需要交互输入一些密码以及组织的相关信息,这些信息再后面的配置中会使用到
会生成一个名为keystore.p12的文件,这个文件就是我们需要使用的文件,将其放置到resources目录下
在application.properties中配置
#https server.ssl.enabled=true server.ssl.key-store= classpath:keystore.p12 server.ssl.protocol=TLS server.ssl.key-store-password= 自定义 server.ssl.keyStoreType= PKCS12 server.ssl.keyAlias= tomcat
配置跳转
创建下面的配置类import org.apache.catalina.Context; import org.apache.catalina.connector.Connector; import org.apache.tomcat.util.descriptor.web.SecurityCollection; import org.apache.tomcat.util.descriptor.web.SecurityConstraint; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory; import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * 设置将访问80端口的请求跳转到指定的端口上去,这样用户就可以直接输入设备地址访问而不需要输入前缀和端口了 * * @author 阿信sxq * */ @Configuration public class ContainerCustomizer { @Value("${server.port}") private Integer webPort; /** * 构建servlet容器的工厂类 * 将80端口跳转到{@linkplain #webPort}端口 * * @return 内置servlet容器类的工厂实例 */ @Bean public EmbeddedServletContainerFactory servletContainer() { TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory() { @Override protected void postProcessContext(Context context) { SecurityConstraint securityConstraint = new SecurityConstraint(); securityConstraint.setUserConstraint("CONFIDENTIAL"); SecurityCollection collection = new SecurityCollection(); collection.addPattern("/*"); securityConstraint.addCollection(collection); context.addConstraint(securityConstraint); } }; factory.addAdditionalTomcatConnectors(createConnector()); return factory; } /** * 创建tomcat连接器。 * 该连接器将会接收http的80端口的访问,并且重定向到指定的端口上去,{@linkplain #webPort} * * @return tomcat连接器 */ private Connector createConnector() { final Connector connector = new Connector(); connector.setPort(80); connector.setRedirectPort(webPort); return connector; } }
这个是使用内置的tomcat做容器的配置方式,使用jetty需要使用另外的方式
jetty配置跳转
下面的代码来自http://stackoverflow.com/questions/26655875/spring-boot-redirect-http-to-https,由于没有使用jetty,所以没有进行验证
import org.eclipse.jetty.security.ConstraintMapping; import org.eclipse.jetty.security.ConstraintSecurityHandler; import org.eclipse.jetty.util.security.Constraint; import org.eclipse.jetty.webapp.AbstractConfiguration; import org.eclipse.jetty.webapp.WebAppContext; class HttpToHttpsJettyConfiguration extends AbstractConfiguration { // http://wiki.eclipse.org/Jetty/Howto/Configure_SSL#Redirecting_http_requests_to_https @Override public void configure(WebAppContext context) throws Exception { Constraint constraint = new Constraint(); constraint.setDataConstraint(2); ConstraintMapping constraintMapping = new ConstraintMapping(); constraintMapping.setPathSpec("/*"); constraintMapping.setConstraint(constraint); ConstraintSecurityHandler constraintSecurityHandler = new ConstraintSecurityHandler(); constraintSecurityHandler.addConstraintMapping(constraintMapping); context.setSecurityHandler(constraintSecurityHandler); } }
@Configuration public class HttpToHttpsJettyCustomizer implements EmbeddedServletContainerCustomizer{ @Override public void customize(ConfigurableEmbeddedServletContainer container) { JettyEmbeddedServletContainerFactory containerFactory = (JettyEmbeddedServletContainerFactory) container; //Add a plain HTTP connector and a WebAppContext config to force redirect from http->https containerFactory.addConfigurations(new HttpToHttpsJettyConfiguration()); containerFactory.addServerCustomizers(server -> { HttpConfiguration http = new HttpConfiguration(); http.setSecurePort(443); http.setSecureScheme("https"); ServerConnector connector = new ServerConnector(server); connector.addConnectionFactory(new HttpConnectionFactory(http)); connector.setPort(80); server.addConnector(connector); }); } }
特别说明
使用上面的方法配置的https由于证书不是受信的,所以浏览器会报警告,需要手工确认,这个没办法相关文章推荐
- 使用nginx实现http访问自动跳转到https端口
- Spring boot 跳转到jsp页面的实现方法
- nginx强制使用https访问的方法(http跳转到https)
- 详解NGINX访问https跳转到http的解决方法
- IIS7如何实现访问HTTP跳转到HTTPS访问
- Spring Boot支持Jetty服务器,支持http、https(ssl、tls)双协议,支持双端口
- nginx实现某个页面http访问,其余全部跳转到https
- C#、VB.NET使用HttpWebRequest访问https地址(SSL)的实现方法
- 如果现在是进行了 http 访问,则应该让请求跳转到 https 的 443 端口上的程序处理类
- Spring Boot支持tomcat服务器,支持http、https(ssl、tls)双协议,支持双端口
- IIS7如何实现访问HTTP跳转到HTTPS访问
- C#、VB.NET使用HttpWebRequest访问https地址(SSL)的实现方法
- 80端口被屏蔽的解决方法,及外网访问内网P2P穿透软件实现
- tomcat设置http自动跳转为https访问
- 强制https访问,在浏览器中输入http的访问地址自动转换为https,端口问题
- php之curl实现http与https请求的方法
- Apache下设置自动将http跳转到https方法
- nginx强制使用https访问(http跳转到https)
- 多公网端口下的tomcat-http跳转到tomcat-https
- tomcat 配置实现http跳转至https