我被赋予了实现登录处理程序的任务。处理程序捕获的唯一细节是用户名和密码。最初我打算使用发布到 servlet 的 JSP。servlet 执行数据库查找并验证用户凭据的位置。成功登录后,您会被重定向,但不成功会将您带回 jsp 并显示相应的错误消息。
然而,在做一些研究后,我发现了 j_security_check 和 JAAS,但我不确定要使用哪个或是否要使用。
我将从这两种方法中获得什么好处,哪种方法最适合我的任务??
我被赋予了实现登录处理程序的任务。处理程序捕获的唯一细节是用户名和密码。最初我打算使用发布到 servlet 的 JSP。servlet 执行数据库查找并验证用户凭据的位置。成功登录后,您会被重定向,但不成功会将您带回 jsp 并显示相应的错误消息。
然而,在做一些研究后,我发现了 j_security_check 和 JAAS,但我不确定要使用哪个或是否要使用。
我将从这两种方法中获得什么好处,哪种方法最适合我的任务??
安全性由以下几个方面组成:
身份验证: - 这包括检查用户的凭据;大多数情况下,这是通过登录机制实现的。您创建登录页面的任务是身份验证的一部分。
授权: - 需要保护应用程序资源免受未经授权的访问,这意味着当用户请求受保护的资源时,应用程序需要确保用户具有适当的访问权限。这通常通过为用户分配角色并放置验证用户访问权限的请求过滤器来完成。这部分比较关键,需要详细的设计分析。仅对用户进行身份验证是不够的,您需要确保那些未经授权的用户不会访问受保护的资源。
传输层安全: - 系统架构需要确保通过网络传输的数据不会落入黑客或嗅探者手中。SSL/TSL 用于实现这一点
J2EE 容器和 Spring 安全等框架为每个安全方面提供通用功能。
您正在尝试开发的是简单的身份验证机制。当涉及到访问控制(即授权)时,应用程序的安全性要求更高。
安全性也需要可扩展,即随着业务需要更改以集成系统和安全性,您的系统应该能够适应单点登录 (SSO)、LDAP 身份验证等内容。
尽管 JAAS 和容器安全性对于扩展来说已经足够好了,但是它们几乎没有限制。例如,您需要依赖供应商特定的配置和适配器。您的应用程序将在部署描述符中声明安全需求,并且服务器管理员需要在服务器端配置安全领域。
我建议您评估 Spring Security(以前称为 Acegi Security)框架。我们在许多项目中都使用了相同的方法,并发现它很健壮、可定制且易于实施。它带有一组过滤器,可以拦截您的请求并提供访问控制。框架可用于根据各种用户存储库(如数据库、LADP 服务器、操作系统安全等)验证用户。它是可扩展的,可以与 SSO 服务器集成。它还提供了有用的标记库来控制对 JSP 页面中部分的访问。不仅如此,该框架还提供了可以通过 Spring AOP 框架在类级别施加的方法级别的安全性
使用您的容器提供的内容,不要实现您的数据库查找来执行此操作。当容器知道谁登录时,您可以使用角色来限制对某些页面的访问。还有不同类型的身份验证。
使用 JAAS 将使您能够灵活地使用另一种验证密码的方式(例如在活动目录中)。也可以用这个实现单点登录。
你不妨看看Spring Security框架。
除非您正在做非常 敏感的事情,否则更简单的方法就足够了。请记住最重要(也是最简单)的一点:在数据库中保留密码哈希,而不是真正的密码。
JAAS 减轻了您的负担,并允许您(或客户端)仅通过放入另一个模块来更改身份验证方法。例如,从 DB auth 到 LDAP 到 Kerberos 到 NT Domain - 你明白了。