jsp - 如何让我的 jsp Web 应用程序从安全 (HTTPS) 协议(protocol)切换到非安全 (HTTP) 协议(protocol)?

标签 jsp security tomcat

我有一个用纯 JSP 和 JavaBeans 编写的网上商店,它部署在 Tomcat 上并且运行良好。 Tomcat 已成功配置 SSL。它只有五页:

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

每当我从购物车页面导航到结帐页面时,浏览器会自动将协议(protocol)从 http -> https 和端口从 8080 -> 8443 切换,这符合预期。然而,问题在于,每当用户从结帐页面导航到主页/产品页面时,它不会将其从 https -> http8443 -> 8080 切换回来。首页/产品和购物车页面 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

最佳答案

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

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

编辑:

客户端重定向更通用,因为它可以将您发送到完全不同的服务器,或更改协议(protocol)(例如从 HTTP 到 HTTPS),或两者兼而有之。并且浏览器知道新的 URL。但这需要在服务器和客户端之间进行额外的来回操作。在这里查看最后一个答案:requestDispatcher Interface Vs sendRedirect

关于jsp - 如何让我的 jsp Web 应用程序从安全 (HTTPS) 协议(protocol)切换到非安全 (HTTP) 协议(protocol)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34799223/

相关文章:

java - 使用 log4j2 的 Apache tomcat 8.5 访问日志

java - RMI:将两个远程对象绑定(bind)到同一注册表时抛出 ClassNotFoundException

html - 从同一 servlet 中的文本字段上传图像和信息

java - Servlet.service() 抛出 NullPointerException

java - 通过填写表单中的详细信息,对另一个服务进行 REST URL 调用

security - 解码嗅探到的数据包

security - 是否可以使用 64 位 I/O block 大小来实现 AES?

java - 在 tomcat 中部署 GWT

java - 如何在 servlet 中使用来自 JSP 文件的 Vector?

regex - 通过检查Application.onRequestStart中的ARGUMENTS.TargetPage来确保ColdFusion的安全性?