j_security_check和JAAS

时间:2020-03-06 14:35:16  来源:igfitidea点击:

我已获得实现登录处理程序的任务。处理程序捕获的唯一详细信息是用户名和密码。最初,我将使用发布到Servlet的JSP。 servlet在其中执行数据库查找并验证用户凭据。成功登录后,我们将被重定向,但未成功将我们带回到jsp并显示适当的错误消息。

但是,在进行了一些研究之后,我发现了j_security_check和JAAS,并且不确定该使用哪个或者根本不使用。

我将从这两种方法中获得什么好处,哪一项最适合我的工作? ?

解决方案

除非我们正在做真正敏感的工作,否则更简单的方法就足够了。只需记住最重要(最简单)的位:在数据库中保留密码哈希,而不是真实密码。

我们也可以检查一下Spring Security框架。

使用容器提供的内容,不要执行数据库查找来执行此操作。当容器知道谁登录时,我们可以使用角色来限制对某些页面的访问。身份验证也有不同类型。

使用JAAS可让我们灵活地使用另一种验证密码的方式(例如,在活动目录中)。也可以以此实现单点登录。

JAAS减轻了负担,并允许我们(或者客户端)仅通过放入另一个模块来更改身份验证方法。例如,从DB身份验证到LDAP到Kerberos到NT域,我们就明白了。

安全性包括以下几个方面:

  • 验证
  • 授权
  • 传输层安全性-加密

身份验证:这包括检查用户的凭据;在大多数情况下,这是通过登录机制实现的。创建登录页面的任务是身份验证的一部分。

授权:需要保护应用程序资源免受未经授权的访问,这意味着,当用户请求受保护的资源时,应用程序需要确保用户具有适当的访问权限。通常,这是通过向用户分配角色并放置请求过滤器来验证用户的访问权限来完成的。此部分更为关键,需要详细的设计分析。仅对用户进行身份验证是不够的,我们需要确保未经授权的用户不能访问受保护的资源。

传输层安全性:系统架构需要确保通过网络传输的数据不会落入黑客或者嗅探者的手中。 SSL / TSL用于实现此目的

J2EE容器和框架(如Spring安全性)为每个安全方面提供了通用功能。

我们尝试开发的是简单的身份验证机制。当涉及访问控制(即授权)时,对应用程序安全性的要求更高。

安全性也需要可扩展,即随着业务需求发生变化以集成系统和安全性,系统应该能够适应单点登录(SSO),LDAP身份验证等情况。

尽管JAAS和容器安全性足以进行扩展,但是几乎没有什么限制。例如,我们将需要依赖于供应商特定的配置和适配器。应用程序将在部署描述符中声明安全需求,服务器管理员需要在服务器端配置安全领域。

我建议我们评估Spring Security(以前的Acegi Security)框架。我们已经在许多项目中使用了相同的工具,并且发现它是健壮的,可定制的和易于实现的。它带有一组过滤器,可拦截请求并提供访问控制。框架可用于根据各种用户存储库(例如数据库,LADP服务器,OS安全性等)验证用户。它是可扩展的,并且可以与SSO服务器集成。它还提供了有用的标记库,用于控制对JSP页面内各部分的访问。
该框架不仅还提供了方法级别的安全性,可以通过Spring AOP框架在类级别上强加此方法