下午好,我正在使用spring boot,并且已经实现了http安全模式(https ),但是我需要知道如何将http请求重定向到https,以及是否有必要指定一个特定的安全端口,比如443,或者我可以使用任何端口。目前我使用端口8080 8443
我的班级
主要类别
package com.prueba.https;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
@SpringBootApplication
public class PruebaHttpsApplication {
public static void main(String[] args) {
SpringApplication.run(PruebaHttpsApplication.class, args);
}
}
请求类
package com.prueba.http.request;
public class PruebaRequest {
public String nombre;
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
}
响应类别
package com.prueba.https.response;
public class PruebaResponse {
public String saludo;
public String getSaludo() {
return saludo;
}
public void setSaludo(String saludo) {
this.saludo = saludo;
}
}
控制器类
package com.prueba.https.controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import com.prueba.http.request.PruebaRequest;
import com.prueba.https.response.PruebaResponse;
@RestController
public class PruebaController {
@PostMapping(value = "/PruebaHTTPS")
public Object PruebaController(@RequestBody PruebaRequest req) {
PruebaResponse res = new PruebaResponse();
res.setSaludo("Hola " +req.getNombre());
return res;
}
}
应用属性
server.port=8443
server.ssl.key-store = classpath:keystore.p12
server.ssl.key-store-password = pass
server.ssl.keyStoreType = PKCS12
server.ssl.keyAlias = tomcat
pom xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.prueba.https</groupId>
<artifactId>PruebaHTTPS</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>PruebaHTTPS</name>
<description>Pruebas HTTPS</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
我的项目结构
科胜
连接HTTP
更新
使用以下适用于我的spring版本的代码,但它会导致http请求出错:
package com.prueba.https;
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.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@ComponentScan
@Configuration
@EnableAutoConfiguration
public class WebsocketSourceConfiguration {
@Bean
public ServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
@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);
}
};
tomcat.addAdditionalTomcatConnectors(getHttpConnector());
return tomcat;
}
private Connector getHttpConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(8080);
connector.setSecure(false);
connector.setRedirectPort(8443);
return connector;
}
}
HTTPS (8443)
HTTP(8443)
HTTP(8080)
为什么我不能指向 http: 8443 并将我重定向到 https?
要将您的< code>HTTP请求重定向到< code>HTTPS请求,您需要添加以下配置:
@Bean
public EmbeddedServletContainerFactory servletContainer() {
TomcatEmbeddedServletContainerFactory tomcat = 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);
}
};
tomcat.addAdditionalTomcatConnectors(redirectConnector());
return tomcat;
}
private Connector redirectConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(8080);
connector.setSecure(false);
connector.setRedirectPort(8443);
return connector;
}
我希望这对你有用。
我正在尝试将所有http流量重定向到https。我尚未在服务器上安装SSL证书,并且正在使用cloudflare灵活SSL选项。 以下代码工作文件 但这让http://www.example.com转向了https://example.com 但是当我添加这个 重定向所有非www网址,如http://example.com到https://example.com 网站没有加载,并给我一个错误,说浏
如何轻松配置嵌入式tomcat服务器,将所有http流量重定向到https?我在弹性负载平衡器后面的ec2实例上运行Spring Boot。我已经配置了ELB来为我处理ssl(这太棒了),它将X-FORWARDED-PROTO头设置为“https”。我想检测什么时候没有设置,并重定向用户,迫使他们使用https,如果他们还没有设置的话。 到目前为止,我已经尝试将以下内容添加到我的applicati
问题内容: 我正在尝试构建一个URL缩短器,并且我希望能够在域之后立即采用任何字符并将它们作为变量url传递。所以举个例子 http://google.com/asdf 会成为 http://www.google.com/?url=asdf。 这是我现在拥有的mod_rewrite,但是我不断收到400错误的请求: 问题答案: 尝试替换为 编辑:尝试替换为
我已经在.ebExtensions文件夹中用以下代码创建了一个配置文件 我确信aws会考虑我的配置,因为de ssl工作得很好。但http块不工作。没有重定向。 也许我的问题是关于重写EB的原始nginx配置,你知道如何实现这一点吗? 谢谢你
我需要配置我的Tomcat 9服务器,将http重定向到https流量。 我尝试过: > < li> 对http端口使用连接器,并具有指向安全连接器的redirectPort属性。 在web.xml底部包括一个安全约束链接,它适用于其他不使用虚拟主机的Tomcat服务器 连接器 安全约束 服务器中的主机配置.xml < Li > https://example 2 . com-Works < Li
我有和这个问题一样的问题,但不是在EC2环境中,只是简单地从命令行启动我的spring boot应用程序。我按照下面这个例子中的代码,成功地让我的应用程序在HTTPS上运行: 现在我可以在。 我希望会重定向到https。现在Chrome只是显示:“未收到数据”,这对用户不太友好。