使用Java Servlets进行表单身份验证的标准方法是什么?
从现在开始,我使用简单的POST HTML表单实现了自己:
但是现在我偶然发现了How to Configure Security with Embedded Jetty,现在我想我可以重复使用已经实现的解决方案,但这里的标准方法是什么?我自己使用Jetty,但是Tomcat或其他Web服务器呢?
我还读到了 j_security_check ,那是什么?这是遗留方法吗?
答案 0 :(得分:14)
您应该使用由Tomcat,Websphere,Glassfish等Servlet容器提供的JAAS安全性。
默认情况下,这些容器支持以下身份验证类型:
HTTP基本身份验证
指定HTTP基本身份验证要求服务器从Web客户端请求用户名和密码,并通过将用户名和密码与指定或默认域中的授权用户数据库进行比较来验证用户名和密码是否有效。
如果未指定身份验证机制,则基本身份验证是默认设置。
使用基本身份验证时,会发生以下操作:
下图显示了指定HTTP基本身份验证时会发生什么。
HTTP基本身份验证客户端和服务器之间HTTP基本身份验证的四个步骤图
基于表单的身份验证
基于表单的身份验证允许开发人员通过自定义HTTP浏览器向最终用户提供的登录屏幕和错误页面来控制登录身份验证屏幕的外观。声明基于表单的身份验证时,会发生以下操作。
下图显示了指定基于表单的身份验证时会发生的情况。
创建基于表单的登录时,请务必使用Cookie或SSL会话信息维护会话。
要使身份验证正常进行,登录表单的操作必须始终为j_security_check。进行此限制是为了使登录表单无论用于哪个资源都可以工作,并且避免要求服务器指定出站表单的操作字段。以下代码段显示了如何将表单编码到HTML页面中:
<form method="POST" action="j_security_check">
<input type="text" name="j_username">
<input type="password" name="j_password">
</form>
摘要式身份验证
与基本身份验证一样,摘要身份验证根据用户名和密码对用户进行身份验证。但是,与基本身份验证不同,摘要式身份验证不会通过网络发送用户密码。相反,客户端发送密码和附加数据的单向加密哈希。虽然密码不是通过线路发送的,但摘要式身份验证要求验证容器可以使用明文密码等效项,以便它可以通过计算预期的摘要来验证收到的验证者。
<强>参考文献:强>
答案 1 :(得分:1)
尝试使用servlet过滤器,无需配置JAAS和其他人员
答案 2 :(得分:-1)
仅当数据库中不存在有关用户的数据时,才尝试转发到错误页面。 如果您发现您的用户使用以下代码将他重定向到他的“主页”
RequestDispatcher dis = request.getRequestDispatcher("relativeURL2Jsp");
dis.forward(request, response);