全站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
分享到:
相关推荐
Laravel开发-laravel-https-redirect 针对基于Laravel的应用程序的灵活HTTPS重定向
http redirect 模块,编译后 insmod /lib/modules/httpredirect.ko即可 基于2.6内核, 带有基于IP地址的数组管理功能, 简单修改,可以很方便跳转到自己需要的网页,并设置超时时间,已经调试通过,
isapi_redirect-1.2.14.exe文件下载 isapi_redirect.dll文件下载
所以在这里用到了nginx的proxy_redirect指定修改被代理服务器返回的响应头中的location头域跟refresh头域数值 以下是截取nginx的一小段配置文档 server { listen 80; server_name www.boke.com; l
谷歌 new tab redirect插件
window.location.href页面跳转的用法(区别于redirect)
isapi_redirect.dll isapi_redirect isapi_redirect架设JSP JSP和IIS IIS插件
微擎公众号模块提示redirect_uri协议与后台配置不一致错误码10039 的解决办法
isapi_redirect-1.2.26.dllisapi_redirect-1.2.26.dllisapi_redirect-1.2.26.dllisapi_redirect-1.2.26.dllisapi_redirect-1.2.26.dllisapi_redirect-1.2.26.dllisapi_redirect-1.2.26.dllisapi_redirect-1.2.26....
struts2中result类型之redirect,重定向
redirect跳转
hsrp support for ICMP Redirect.
isapi_redirect-1.2.40
forward与redirect!转发和重定向 解析
PDF ReDirect 提供了简易的 PDF 文件制作功能,程序安装后就好比在操作系统中多了一台虚拟的 PDF 打印机,任何供打印的文件,均能直接输出成 PDF 格式文件,无需经由额外的转档工作.
swiper,类似效果见https://www.wegame.com/?adtag=cop.innercop.tgp.redirect
jQuery.redirect jQuery的简单HTTP POST和GET重定向插件 易于使用 GET和POST请求 与jQuery,jQlite和Zepto.js兼容 支持嵌套对象和数组 它是如何工作的? jQuery.redirect函数将创建一个表单,并使用数据填充它(它...
forward转发与redirect重定向的区别