如何让我的jsp webapp swtich从安全(HTTPS)转换为非安全(HTTP)协议?

时间:2016-01-14 20:35:12

标签: jsp security tomcat

我有一个用纯JSP和JavaBeans编写的webstore,它在Tomcat上部署并正常运行。 Tomcat已成功配置SSL。它只有五页:

  • 主页(非安全页面) - 显示主页
  • 产品页面(非安全页面) - 始终显示单个产品
  • 购物车页面(非安全页面) - 添加产品后显示购物车页面
  • 结帐页面(安全页面) - 包含所有信息的单一结帐页面,例如客户地址,付款方式,送货方式等。
  • 收据页面(安全页面) - 生成订单#并显示订单总数。

每当我从“购物车”页面导航到“结帐”页面时,浏览器会自动从http -> https8080 -> 8443端口切换协议,这是预期的。但问题是,只要用户从“结帐”页面导航到“主页/产品”页面,它就不会从https -> http8443 -> 8080切换回来。 Home / Product and Cart页面url都被转换为安全页面,这不是我想要的。

的web.xml

<!-- Security for Checkout module -->
<security-constraint>
    <web-resource-collection>
        <web-resource-name>mycheckout</web-resource-name>
        <url-pattern>/jsp/checkout/*</url-pattern>
    </web-resource-collection>
    <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
</security-constraint>

文件夹结构:

jsp/
    home.jsp
    product.jsp 
    cart.jsp
    checkout/
        checkout.jsp
        receipt.jsp

1 个答案:

答案 0 :(得分:2)

您可以在重定向之前构建URL:

 if(request.getScheme().equals("https"){
 String redirect = "http://"+ request.getServerName()+":"+ getServletContext().getInitParameter("http_port")+"/"+request.getContextPath()+"/myurl";
response.sendRedirect(redirect);
}

编辑:

客户端重定向功能更加通用,因为它可以将您发送到完全不同的服务器,或更改协议(例如,从HTTP到HTTPS),或两者兼而有之。浏览器知道新的URL。但它需要在服务器和客户端之间进行额外的反复。请参阅此处的最后一个答案:requestDispatcher Interface Vs sendRedirect