我有一个用纯JSP和JavaBeans编写的webstore,它在Tomcat上部署并正常运行。 Tomcat已成功配置SSL。它只有五页:
每当我从“购物车”页面导航到“结帐”页面时,浏览器会自动从http -> https
和8080 -> 8443
端口切换协议,这是预期的。但问题是,只要用户从“结帐”页面导航到“主页/产品”页面,它就不会从https -> http
和8443 -> 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
答案 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