http项目改为/支持https的方案、无需修改后台代码

背景描述:原来的项目前后台都是http,现在某个服务要求前台必须使用https;

方案1:前台部署在https里,后面代码修改;但是微服务架构,后台工作量太大;

方案2:前台部署在https里,后台代码不修改;

             此时需要完成三个问题:

问题1:前台如何部署在https中;tomcat或者nginx;优先使用nginx;

步骤1:生成nginx的对应证书;使用域名证书,或者研发环境证书都可以;

参考文档:安装openshell,生成nginx证书;

Windows/Linux 生成Nginx证书【Nginx代理https】_crt pem key nginx代理-CSDN博客

步骤2:

1.1,把证书,前端代码都放在nginx中

1.2,配置证书和前台路径

案例中9909是前端https端口,9903是后端https端口,9901是后端http请求

1.3,启动nginx,通过https在浏览器访问前端;

1.3.1,nginx日志,在logs/error.log中;【假如启动报错,这里面都能看到错误信息】

问题2:https的前端,对应的必须是https的后端;需要把https转换为http【同样用nginx,可以使用同一个nginx】

    server {
        listen 9903 ssl;
        server_name  192.168.100.104;

        ssl_certificate      E:/nginx-1.16.1a/cert/server.pem;
        ssl_certificate_key  E:/nginx-1.16.1a/cert/server.key;
         location / {
                proxy_pass http://218.96.105.54:9901;
        }

配置后台的端口和证书

问题3:如何处理前后端端口不一样的跨域问题【核心】

启动nginx;在浏览器使用https访问前台,并登录系统;查看浏览器控制台是否报错;

常见错误信息

1、重复处理跨域【需要去掉一个跨域】

Access to XMLHttpRequest at 'https://192.168.100.104:9989/GateWayPC/LoginAndSetting/login' from origin 'https://192.168.100.104:9905' has been blocked by CORS policy: The 'Access-Control-Allow-Origin' header contains multiple values 'https://192.168.100.104:9905, http://192.168.100.104:9901', but only one is allowed.

解决方案:去掉多余的跨域处理

2、没有处理跨院【需要增加跨域处理】

Access to XMLHttpRequest at 'https://192.168.100.104:9989/jf/PSysyteminit/selectPSysyteminitByNameAndCode?code=A59' from origin 'https://192.168.100.104:9905' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

解决方案:增加跨域处理

3、其他错误

nginx Request header field uuid is not allowed by Access-Control-Allow-Headers in preflight response

解决方案add_header 'Access-Control-Allow-Headers' 'uuid,

最终nginx配置:

1,证书;2,前端https端口和后端https端口,后端http端口;3,如何处理跨域;

经验总结:

1,最开始使用nginx只能做一些简单的配置,这么复杂的头一次遇到;

1.1,遇到问题,先网络找答案;你遇到的问题,大家都遇到过;注意答案可以参考,但不要一模一样照抄;

1.2,一定要详细查看每种方案的报错信息。。。。。

  • 7
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可以通过编写拦截器来实现修改/添加前端传输到后台的header和cookie参数。 首先,定义一个拦截器类,实现 HandlerInterceptor 接口,并在其中重写 preHandle 方法。在 preHandle 方法中,可以通过 request.getHeader() 和 request.getCookies() 方法获取前端传输过来的 header 和 cookie 参数,然后进行修改/添加,最后再通过 response.setHeader() 和 response.addCookie() 方法将修改后的参数传输到后台。 下面是一个简单的示例: ```java public class CustomInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 获取前端传输过来的 header 参数 String token = request.getHeader("token"); // 修改/添加 header 参数 response.setHeader("token", "newToken"); // 获取前端传输过来的 cookie 参数 Cookie[] cookies = request.getCookies(); // 修改/添加 cookie 参数 Cookie cookie = new Cookie("newCookie", "cookieValue"); response.addCookie(cookie); // 返回 true 表示继续执行后续的处理器和拦截器 return true; } } ``` 然后,在 Spring Boot 项目中配置拦截器,可以通过实现 WebMvcConfigurer 接口,在 addInterceptors 方法中添加拦截器: ```java @Configuration public class InterceptorConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new CustomInterceptor()).addPathPatterns("/**"); } } ``` 这样,当前端发送请求时,拦截器就会拦截请求,并修改/添加前端传输到后台的 header 和 cookie 参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值