全站HTTPS并不是配置证书CA,改改路径URL那么简单!
SSL卸载(SSL Offloading):把SSL配置在负载均衡器上,然后通过其处理握手之后将decode的https数据转发给后台的Web服务器。
如下构成:
|
|(https)
|
Load Balancer
/ | \
/ | \
/(http) |(http) \(http)
WebServer1 WebServer2 WebServer3
HTTPS的加密传输将只限于客户端发起请求到负载均衡器之间的公网阶段,内网的通讯仍然使用非加密的HTTP传输。每个Web服务器中所有的处理请求都认为是来自http,
所有相对路径的 sendredirect 将都会被转发到http!
比如在Filter或Interceptor里的sendRedirect:
response.sendRedirect(request.getContextPath() + "/admin/welcome.do?flag=timeout");
或者Spring的Controller里的“redirect:”:
return "redirect:/admin/welcome.do";
通过HttpServletResponseWrapper可以通过Filter拦截SendRedirect请求并固定跳转到HTTPS。
web.xml
<filter>
<filter-name>AbsoluteSendRedirectFilter</filter-name>
<filter-class>com.rensanning.core.filter.AbsoluteSendRedirectFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>AbsoluteSendRedirectFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
AbsoluteSendRedirectFilter.java
public class AbsoluteSendRedirectFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
RedirectResponseWrapper redirectResponseWrapper = new RedirectResponseWrapper(request, response);
filterChain.doFilter(request, redirectResponseWrapper);
}
}
RedirectResponseWrapper.java
public class RedirectResponseWrapper extends HttpServletResponseWrapper {
private final HttpServletRequest request;
public RedirectResponseWrapper(final HttpServletRequest inRequest, final HttpServletResponse response) {
super(response);
this.request = inRequest;
}
@Override
public void sendRedirect(final String pLocation) throws IOException {
if (StringUtils.isBlank(pLocation)) {
super.sendRedirect(pLocation);
return;
}
try {
final URI uri = new URI(pLocation);
if (uri.getScheme() != null) {
super.sendRedirect(pLocation);
return;
}
} catch (URISyntaxException ex) {
super.sendRedirect(pLocation);
}
// !!! FIX Scheme !!!
String finalurl = "https://" + this.request.getServerName();
if (request.getServerPort() != 80 && request.getServerPort() != 443) {
finalurl += ":" + request.getServerPort();
}
finalurl += pLocation;
super.sendRedirect(finalurl);
}
}
如果采用Spring的话可以设置:redirectHttp10Compatible=false。
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/" />
<property name="suffix" value=".jsp" />
<property name="redirectHttp10Compatible" value="false" />
</bean>
参考:
http://www.exampit.com/blog/javahunter/5-8-2016-Why-does-https-become-http-on-a-sendredirect
http://stackoverflow.com/questions/3401113/spring-mvc-redirect-prefix-always-redirects-to-http-how-do-i-make-it-stay
分享到:
相关推荐
通过使用proxy_redirect指令,我们可以将这个Location重写成客户端能够理解且不会暴露后端服务器细节的地址。 proxy_redirect指令可以设置为三种模式:default、off或redirect replacement。其中,“default”模式...
ISAPI_Redirect是Apache HTTP服务器的一个扩展模块,主要用于在IIS(Internet Information Services)上实现与Apache的交互。这个工具使得IIS可以利用Apache的 mod_jk 模块来处理Java应用程序,如Tomcat服务器上的...
http redirect 模块,编译后 insmod /lib/modules/httpredirect.ko即可 基于2.6内核, 带有基于IP地址的数组管理功能, 简单修改,可以很方便跳转到自己需要的网页,并设置超时时间,已经调试通过,
【谷歌 New Tab Redirect 插件】是一款专为谷歌浏览器(Chrome)设计的扩展程序,它允许用户自定义新标签页打开时的默认页面,从而改变浏览器的新标签页重定向行为。这款插件对于那些希望提高工作效率,或者希望通过...
1. **配置`app/Http/Middleware/RedirectIfNotHttps.php`**:Laravel自带了一个中间件,名为`RedirectIfNotHttps`,它可以检查当前请求是否通过HTTPS进行。如果请求是HTTP,它会自动将用户重定向到对应的HTTPS URL。...
### Struts2中Redirect跳转深入解析 在Struts2框架中,`redirect`与`redirect-action`以及`chain`都是用于控制流程转向的关键技术,它们各有特点和适用场景,理解其工作原理对于构建高效、灵活的应用程序至关重要。...
ISAPI Redirect的核心组件是一个名为`isapi_redirect.dll`的动态链接库,它作为IIS的扩展插件运行。当IIS接收到一个需要由Java应用程序处理的请求时,ISAPI Redirect会捕获这个请求,并通过HTTP重定向或FastCGI协议...
标题中的"Isapi_redirect.dll"是一个关键组件,主要用于在Microsoft Internet Information Services (IIS)上运行Java Server Pages (JSP)。IIS是Windows操作系统中广泛使用的Web服务器,而JSP是Java平台上的动态网页...
ISAPI Redirect 1.2.40的NOTICE文件可能列出了所有被引用的开源组件,以及它们各自的作者和许可条件,这对于遵守开源软件的使用规定至关重要。 `isapi_redirect.dll` 是ISAPI Redirect的主要动态链接库文件,它实现...
### window.location.href页面跳转的用法(区别于redirect) #### 概述 在Web开发过程中,页面跳转是一项常见的需求。通常我们会使用`Response.Redirect`来进行页面跳转,但这种方式无法在跳转前执行客户端脚本...
`Redirect`类型的`Result`执行的是HTTP的302临时重定向。这意味着当Action执行完成后,服务器不会直接返回处理后的页面内容,而是向客户端浏览器发送一个响应,指示浏览器去请求一个新的URL。这个新URL可以是相对...
- Redirect(重定向)会产生一个新的请求,原来的`HttpServletRequest`对象会被销毁,因此无法保留转发前的一些属性。 3. **适用场景**: - Forward(转发)通常用于同一Web应用内部的页面跳转,适用于需要传递...
ISAPI_Redirect 是一个重要的组件,主要在IIS(Internet Information Services)服务器环境中使用,它允许IIS通过Java Servlets和JavaServer Pages(JSP)技术来处理HTTP请求。这个组件是Apache Jakarta项目的一部分...
在本例中,我们讨论的是isapi_redirect的1.2.27版本,特别强调其专为64位系统设计。值得注意的是,该版本并不一定是最新版,但它是根据特定需求和环境选择的最适合的版本,因为软件的适用性往往比版本的新旧更重要。...
微擎公众号模块提示redirect_uri协议与后台配置不一致错误码10039 的解决办法
DNS Redirect是一款轻量级的DNS服务器程序,设计用于帮助用户实现本地DNS管理和网址过滤功能。这个工具的独特之处在于它的简洁性和易用性,使得非专业人员也能轻松操作。通过DNS Redirect,用户可以自定义域名解析...
标题中的"Isapi_redirect_1.2.6.dll"和"Isapi_redirect-1.2.14.dll"是两个版本不同的ISAPI(Internet Server Application Programming Interface)重定向器组件,主要用于在IIS(Internet Information Services)...
在ASP.NET开发中,页面跳转是常见的操作,主要涉及两种方法:Response.Redirect和Server.Transfer。它们虽然都能实现页面间的导航,但在工作原理、数据处理和用户体验上存在显著差异。 **Response.Redirect** ...