我有一个用纯 JSP 和 JavaBeans 编写的网上商店,它部署在 Tomcat 上并且运行良好。 Tomcat 已成功配置 SSL。它只有五页:
- 主页(非安全页面)- 显示主页
- 产品页面(非安全页面)- 始终显示单个产品
- 购物车页面(非安全页面)- 添加产品后显示购物车页面
- 结帐页面(安全页面)- 包含客户地址、付款方式、送货方式等所有信息的单一结帐页面
- 收据页面(安全页面)- 生成订单号并显示订单总额。
每当我从购物车页面导航到结帐页面时,浏览器会自动将协议(protocol)从 http -> https
和端口从 8080 -> 8443
切换,这符合预期。然而,问题在于,每当用户从结帐页面导航到主页/产品页面时,它不会将其从 https -> http
和 8443 -> 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/