一尘不染

获取HTTPS的JSP页面的服务器名称和端口号

jsp

我需要为表单操作创建URL,但是该表单应该在https当前运行于HTTPS的9002端口上的底层系统下提交。我无法在JSP页面中使用以下选项

<form:form action="${request.contextPath}/springSecurity/login"
method="post" commandName="loginForm" target="guestFrame">

因为在HTTP中时上下文路径以HTTP形式出现,并且系统将引发异常,因为表单应该由HTTPS提交。我无法将动作URL硬编码为当前的主机名localhost,因为HTTPS端口是可配置的,因此甚至无法进行硬编码。

有什么方法可以使用JSTL或其他方法在JSP中创建URL,以便可以在HTTPS下提交表单


阅读 435

收藏
2020-06-10

共1个答案

一尘不染

HttpServletRequest.getServerName()将给出服务器名称。但是,没有办法获得https端口。443如果要在方法中对其进行修复,则应使用默认值。

但是好的解决方案是将用作Security Transport Guarantee登录网址,以便服务器将springSecurity/login页面自动重定向到https

将此条目添加到中web.xml,该条目将自动重定向springSecurity/loginhttps

<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>
2020-06-10