前端发送https请求后台会报IllegalArgumentException错误,首先需要先给服务器域名配置ssl证书,
在nginx.conf文件配置如下
server {
listen 443 ssl;
server_name .com; #ssl证书配置的域名
ssl_certificate .pem; #证书路径
ssl_certificate_key .key; #证书路径
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; #表示使用的TLS协议的类型。
ssl_prefer_server_ciphers on;
location / {
root dist0;
index index.html;
}
}
nginx配置好之后就能安全访问域名,单独访问http接口是没问题的,但是放到这个https域名之后会报This request has been blocked; the content must be served over HTTPS.
前端将接口改成https之后 后端再去yml里边配置ssl证书
server:
port: 8099
ssl:
key-store: classpath: .pfx #将文件放在resources下 跟yml同级便可
key-store-password: 密码 #下载的文件里会带一个txt文本 复制就行
key-store-type: PKCS12
my:
httpPort: 8088
httpsPort: 8099
还需复制一个配置类,CV即可,无需改动
package cn.config;
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.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* 连接器配置 配置http向https的重定向,即使前端依然访问http,也会被定向到https
*/
@Configuration
public class HttpToHttpsConfig {
@Value("${server.my.httpPort}")
private int httpPort;
@Value("${server.my.httpsPort}")
private int httpsPort;
/**
* http重定向到https
* @return
*/
@Bean
public TomcatServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
@Override
protected void postProcessContext(Context context) {
SecurityConstraint constraint = new SecurityConstraint();
constraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection = new SecurityCollection();
collection.addPattern("/*");
constraint.addCollection(collection);
context.addConstraint(constraint);
}
};
tomcat.addAdditionalTomcatConnectors(httpConnector());
return tomcat;
}
@Bean
public Connector httpConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
//Connector监听的http的端口号
connector.setPort(httpPort);
connector.setSecure(false);
//监听到http的端口号后转向到的https的端口号
connector.setRedirectPort(httpsPort);
return connector;
}
}
看的别人的文章有的在yml 的httpsPost那里写443,因为我是放在nginx里的,这个端口被占用所以我是直接写的8080和8099,到这里不出意外就算是完美结束了.第一次遇见这种情况记录一下!!!
这篇博客记录了在遇到前端通过HTTPS请求后台时遇到的IllegalArgumentException错误,解决方案包括在nginx中配置SSL证书,确保安全访问,并在后端的yml文件中配置SSL证书,同时通过配置类实现HTTP到HTTPS的重定向。文章详细介绍了每个步骤,包括端口设置和相关代码片段,适合遇到类似问题的开发者参考。
1324

被折叠的 条评论
为什么被折叠?



