我需要为表单操作创建URL,但是该表单应该在https当前运行于HTTPS的9002端口上的底层系统下提交。我无法在JSP页面中使用以下选项
https
<form:form action="${request.contextPath}/springSecurity/login" method="post" commandName="loginForm" target="guestFrame">
因为在HTTP中时上下文路径以HTTP形式出现,并且系统将引发异常,因为表单应该由HTTPS提交。我无法将动作URL硬编码为当前的主机名localhost,因为HTTPS端口是可配置的,因此甚至无法进行硬编码。
localhost
有什么方法可以使用JSTL或其他方法在JSP中创建URL,以便可以在HTTPS下提交表单
HttpServletRequest.getServerName()将给出服务器名称。但是,没有办法获得https端口。443如果要在方法中对其进行修复,则应使用默认值。
HttpServletRequest.getServerName()
443
但是好的解决方案是将用作Security Transport Guarantee登录网址,以便服务器将springSecurity/login页面自动重定向到https。
Security Transport Guarantee
springSecurity/login
将此条目添加到中web.xml,该条目将自动重定向springSecurity/login到https。
web.xml
<security-constraint> <web-resource-collection> <web-resource-name>secure</web-resource-name> <url-pattern>/springSecurity/login</url-pattern> </web-resource-collection> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint>