一.场景:

  在企业内网应用,以及一些安全要求不高的网站会有一些https转http的需求,例如只是登陆https协议,其他请求都是走http协议,走http协议不再需要重新登陆一次。

二.解决方案

  Cookie时效:

  •   当cookie是secure的情况下,当服务器从https协议重定向到http协议后,这样的cookie就不会随请求发送到服务器。
  •   当cookie不是secure的情况下,当服务器从http协议重定向到https协议后,这样的cookie就不会随请求发送到服务器。

所以解决的方法就是在https认证后,除了构造一个secure的cookie(包含session id信息),同时构造一个非secure的cookie(包含session id信息),这样页面跳转后就一致保持session有效了,从而达到https重定向到http后不需要登陆的效果。

  

  图中没有详细描述web容器的跳转,仅仅想描述协议转换的实现过程。

主要点说明:

  重定向跳转在页面中实现,而不在Authenticator实现,也不在Filter实现,因为Response已经commit。

  Filter实现增加非Secure cookie的逻辑,代码:

  

import java.io.IOException;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;public class HttpsCookieFilter implements Filter {@Overridepublic void destroy() {}@Overridepublic void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {final HttpServletRequest httpRequest = (HttpServletRequest) request;final HttpServletResponse httpResponse = (HttpServletResponse) response;final HttpSession session = httpRequest.getSession(false);// servlet3if (session != null) {System.out.println("HttpsCookieFilter set session cookie:"+ session.getId());final Cookie cookie = new Cookie("JSESSIONID",session.getId());cookie.setMaxAge(-1);//no storecookie.setSecure(false);cookie.setPath(httpRequest.getContextPath());cookie.setHttpOnly(true);httpResponse.addCookie(cookie);}//servlet2//httpResponse.addHeader(//          "Set-Cookie",//           "JSESSIONID=" + session.getId() + "; Path="//                   + httpRequest.getContextPath() + "; HttpOnly");chain.doFilter(request, response);}@Overridepublic void init(FilterConfig arg0) throws ServletException {}}

  

三.其他

在http://www.ruanyifeng.com/blog/2011/02/seven_myths_about_https.html

有提到没有必要从https重定向到http的一些原因。

  

转载于:https://www.cnblogs.com/yangjun1120/archive/2012/09/29/2708348.html

HTTPS重定向到HTTP相关推荐

  1. 阿里云slb配置https重定向后变为http

    阿里云slb配置https重定向后变http问题解决 背景描述 问题 部署结构 网上搜索到的方案 方案一 方案二 原理剖析 Servlet容器重定向 Shiro 重定向 Spring MVC 重定向 ...

  2. linux https重定向,Linux | Apache环境下强制http跳转至https的配置总结

    如果网站安装SSL证书开启HTTPS后,不设置强制跳转的话,http和https会同时存在,那么如何在Apache Web环境下将HTTP强制跳转到HTTPS呢? 接下来将给给出使用.htaccess ...

  3. php 重定向到https,php - 如何从HTTPS重定向到HTTP? - SO中文参考 - www.soinside.com

    如果我了解您,以下代码将解决此问题: RewriteEngine On RewriteCond %{HTTPS} =off RewriteCond %{SCRIPT_FILENAME} !\/inde ...

  4. vue3 项目部署,Nginx配置https,重定向,详细流程

    文章目录 前情提要 应用场景 安装 使用 实战解析 最后 前情提要 一个web项目完成后,我们需要打包部署上线,关于打包的实战在我的vite专栏里已经有过一些实践,今天我们来实践一些部署的过程,当然部 ...

  5. H3C V7 AC https页面无法重定向问题处理经验总结

    问题描述: V7 WX3520H 配合WA4320i-ACN-SI做本地转发,portal配置在服务模板,即采用本地转发集中认证的portal方案: 客户使用中,发现AP下终端对http页面重定向正常 ...

  6. http如何全站301重定向到https

    对于301重定向这一概念玩SEO的同志们都不陌生了,近些年来https协议越来越火,谷歌已经明确了使用https相对http来说会有更好的排名,再加上百度大大已经明确了对https的扶持政策,老威现在 ...

  7. HTTPS下强制重定向认证

    网络安全准入对终端设备最开始和直接的就是强制其认证合法性. 原有基于HTTP重定向认证已失效,因为HTTP不安全.且浏览器都强制HSTS技术只能HTTPS. 怎么在HTTPS下还能重定向来认证? 住宿 ...

  8. 在express.js上启用HTTPS

    本文翻译自:Enabling HTTPS on express.js I'm trying to get HTTPS working on express.js for node, and I can ...

  9. 以太坊服务器是什么_搭建以太坊节点服务器https API

    一.启动RPC 我们在搭建完以太坊私链之后(搭建教程参考前面几篇文章),可以正常启动以太坊,启动RPC的方式有2种: 1.进入到 Geth JavaScript console,启动 #./geth ...

最新文章

  1. java并发实战看不懂,附带学习经验
  2. 微信翻译生日快乐的代码_微信「隐藏彩蛋」,你发现了没?
  3. 利用java打印正三角形_JAVA一层for循环实现打印正三角形和到三角形
  4. leetcode算法题--组合总和
  5. Hadoop详解(七):YARYN完全分布式环境搭建
  6. executequery方法_【接口测试】soapui中数字、字符串、日期时间、数据库连接参数化的设置方法...
  7. android系统三防机,这才是真正给老人设计的智能手机:三防+安卓系统+超大音量,AGM H2...
  8. 中国首台千万亿次超级计算机,中国首台千万亿次超级计算机首批设备开始试用...
  9. Custom.pll : ZOOM小测试
  10. python2创建3个线程_用python创建一个线程需要多长时间
  11. RabbitMq学习笔记003---RabbitMQ处理类型分类
  12. 原生JS那些事:原生JS添加和删除class类名
  13. 大学生必须要知道的毕业设计基本流程
  14. 使用四元数解决万向节锁(Gimbal Lock)问题
  15. MySQL中查询字段为空或者为null方法
  16. 威廉·布莱克《从一颗沙子看世界》(To see a world in a grain of sand)
  17. 计算机软件lumion的使用例子,Lumion怎么用?BIM软件教学:带你掌握Lumion实战应用...
  18. 数字绘画技术,从数位板到数位屏
  19. java 浮点型_java 基础 浮点类型
  20. 电驴无法增加服务器怎么办,电驴连接不上服务器怎么办?

热门文章

  1. linux c 获取 多个硬盘序列号_veket系统中使用GParted进行硬盘分区
  2. python selenium 下拉列表_Selenium+Python之下拉菜单的定位
  3. 计算机上没有系统软件应用软件也一样能使用,2010判断题一般双击桌面上的程序图标可以打开该程序...
  4. 边缘计算应用场景_从6大应用场景,看边缘计算落地生根
  5. kNN(k-nearest-neighbor)算法的Python实现
  6. 输入输出系统的发展概况
  7. spark mlib入门
  8. sprk sql自定义UDF函数
  9. 声明类对象加括号与声明指针对象加括号的问题
  10. 【本人秃顶程序员】Java程序员成长三部曲!