什么是做形式的认证与Java servlet的标准方法是什么?
既然现在我已经实现我自己用一个简单的POST HTML表单:
- 检查对数据库发送参数
- 如果存在的话,保存用户对象到HttpSession中
- 检查每个Servlet的这个对象是否存在
- 如果不是:重定向到登录页面,并显示错误消息
但现在我已经绊了如何使用嵌入式码头配置安全 ,现在我想到的是,我可以重复使用已经实施的办法,解决问题,但这里的标准是什么方法呢? 我使用自己的码头,但对于Tomcat或其他web服务器?
我也读到j_security_check,与什么? 那是一个传统的方法是什么?
你应该使用Servlet容器如Tomcat下,WebSphere,Glassfish的提供JAAS安全。
默认情况下,这些容器支持这些身份验证类型:
HTTP基本身份验证
指定HTTP基本身份验证要求服务器请求从Web客户端的用户名和密码,验证用户名和密码是通过比较它们对在指定或默认领域授权用户的数据库有效。
基本身份验证是当你没有指定的认证机制默认。
当使用基本身份验证,发生下列操作:
- 客户端请求访问受保护的资源。
- Web服务器返回请求用户名和密码的对话框。
- 客户端提交的用户名和密码的服务器。 4. \服务器验证指定领域中的用户,如果成功,返回所请求的资源。
下图显示了当您指定HTTP基本身份验证会发生什么。
客户端和服务器之间的HTTP基本认证四个步骤HTTP基本验证图
基于表单的认证
基于表单的认证允许开发人员通过自定义,一个HTTP浏览器呈现给最终用户的登录屏幕和错误页面来控制登录认证屏幕的外观和感觉。 当基于表单的认证声明,将发生以下操作。
- 客户端请求访问受保护的资源。
- 如果客户端是未经认证,客户端与服务器重定向到登录页面。
- 该客户端提交登录表单到服务器。
- 服务器尝试对用户进行认证。
- 如果验证成功,验证用户的主体进行检查,以确保它在被授权访问该资源的作用。 如果用户被授权,该服务器通过使用存储的URL路径重定向的客户资源。
- 如果验证失败,客户端转发或重定向到一个错误页面。
下图显示了当您指定基于表单的认证会发生什么。
当你创建一个基于表单的登录,一定要保持使用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>
摘要式身份验证
如基本身份验证,摘要式身份验证验证基于用户名和密码的用户。 但是,与基本身份验证,摘要式身份验证在网络上不发送用户密码。 取而代之的是,客户端发送的密码和其他数据的单向加密散列。 尽管密码未在金属丝送出,摘要认证要求明文口令当量提供给所述认证容器,以便它可以通过计算预期的摘要验证接收到的认证器。
参考文献:
- 如何保护我的Web应用程序
- 保护Web应用程序
- 保护Java EE 5 Web应用程序
- 声明安全要求的部署描述符
- 客户端证书认证
尝试使用Servlet过滤器,无须配置JAAS和其他工作人员
尝试转发到错误页面,只有在有关用户的数据不存在于数据库中。 如果您发现您的用户使用下面的代码来他重定向到他的“家”网页
RequestDispatcher dis = request.getRequestDispatcher("relativeURL2Jsp");
dis.forward(request, response);