该应用程序是一个简单的 JSP/Servlet 应用程序。我想执行用户身份验证(使用 BASIC 身份验证),如果用户通过身份验证,那么我将使用 SSL(即 https)将他们重定向到主屏幕。必须在单击按钮时执行基本身份验证。
为了实现这一点;最初我在 web.xml 中配置了基本身份验证,如下所示:
<security-role>
<role-name>Admin</role-name>
</security-role>
<security-role>
<role-name>Guest</role-name>
</security-role>
<security-constraint>
<web-resource-collection>
<web-resource-name>BasicDemo</web-resource-name>
<url-pattern>/*</url-pattern>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>Admin</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
代码的用户 BASIC Authentcation 部分运行良好(弹出对话框要求输入用户名和密码,并且运行良好)
然后我按照以下步骤配置 SSL:
1) 使用 keytool 生成一个 Keystore
2) 在 server.xml 中添加以下条目:
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="${user.home}/.keystore"
keystorePass="password" />
3)在 web.xml 里面添加了这个
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
在运行应用程序时,以下是我遇到的问题:
1)点击按钮(必须执行基本认证),认证对话框没有出现(出现基本认证要求输入用户名和密码)
2)我被重定向到带有 GET 的 https 链接(是的 https 出现在 url 中),并且执行了 servlet 的 doGet() 方法,这是不正确的,因为提交按钮表单是这样的,因此 doPost 方法应该是执行而不是 doGet:
<form action="CentralController" method="post">
我这边的一个错误可能是使用 POST 而不是 GET 进行身份验证,但我仍然觉得这应该可行,我可能遗漏了一些东西,因此它不起作用。请让我知道问题出在哪里以及如何解决它以达到我的期望。
编辑
web.xml中的 Servlet 定义
<servlet>
<servlet-name>CentralController</servlet-name>
<servlet-class>com.controller.CentralController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CentralController</servlet-name>
<url-pattern>/CentralController</url-pattern>
</servlet-mapping>
这是表格:
<form action="CentralController" method="post">
<input type="submit" value="Submit" name="submit">
</form>