slb,ngix转发https后 springboot返回跳转为http
网上一般五种方法
1.配置nginx, 2.改为war发布修改tomcat配置 3.使用shiro 4.在启动类型里面修改EmbeddedServletContainerFactory(spring boot低配版本的才行) 5.在control里面的使用RedirectView跳转
见下面的参考链接
参考:
https://www.cnblogs.com/linyufeng/p/12636322.html
https://blog.csdn.net/qq_35510622/article/details/79400477?utm_source=blogxgwz6
https://blog.csdn.net/blomule/article/details/105269149/
我这儿的问题:运维加了证书, 使用https请求域名解析, slb转发http请求到我的springboot.
使用的阿里的slb转发, 配置不了nginx, 不想用war发布(要改一些配置, 测试不方便, 还要架个tomcat服务器), shiro看了下也麻烦, spring boot版本是最新的已经找不到TomcatEmbeddedServletContainerFactory
我的解决方法:
在配置表中加个配置responseHttps(boolen类型), 表示网站返给浏览器是http还是https.
用myRedirect替换response.sendRedirect代码.
用myRedirectView替换FORWARD_URL_PREFIX. 在一些control里面, 返回字符串表示模板名html的函数里面, 但使用了FORWARD_URL_PREFIX的, 如:return FORWARD_URL_PREFIX + "mypage"; control的返回类型改为Object, 可以返回string, 也可以返回RedirectView, RedirectView可以配置返给客户端为https
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | /** * 替换跳转为https * @param response * @param relativeUrl */ public static void myRedirect(HttpServletResponse response, String relativeUrl) { if (responseHttps) { HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); //http://长度为7 int endIndex = request.getRequestURL().indexOf( "/" , 8 ); String url = request.getRequestURL().substring( 0 , endIndex); try { response.sendRedirect(url.replace( "http://" , "https://" ) + relativeUrl); } catch (Exception ex) { } } else { try { response.sendRedirect(relativeUrl); } catch (Exception ex) { } } } /** * 替换前端跳转FORWARD_URL_PREFIX, 因为跳转时给前端的url不是https的 * @param relativeUrl * @return */ public static RedirectView myRedirectView(String relativeUrl) { return new RedirectView(relativeUrl, true , false ); } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义