为什么我要使用JAAS来防止手写安全?

use*_*512 13 java security jaas java-ee

我有手写的安全性,简单的servlet过滤器,它将未经授权的用户重定向到他们的登录页面.登录控制器在成功验证或其主页面后将它们重定向到请求的URL.这种方法工作正常,唯一的缺点是,我必须通过堆栈跟踪将存储在HttpSession中的User对象传递给EJB bean.

现在我重写了一些代码并使用Spring-security作为基于http的身份验证.它与Glassfish JAAS自动集成.

我不再需要通过stacktrace传递User,调用sessionContext.getCallerPrincipal()就足够了.但是主要对象只返回userName,而不是userId,所以如果我需要userId,我必须执行加法选择.

1)无论如何都有扩展Principal对象,所以它可以存储更多属性?

2)为什么我应该使用JAAS或Spring Security或其他安全框架,为什么不只是手写servlet过滤器?

Jur*_*rri 10

2)使用像JAAS这样的标准安全机制有很多优点:

  1. 您可以通过配置服务器轻松更改用户进行身份验证的方式 - 无需更改代码中的任何内容.

  2. 您可以确保您的安全性是最新的,支持最强大的算法,以安全的方式存储Principal等等.再次,只需保持与您的服务器,框架等最新.拥有手写安全模块很容易出错并很快就会过时.

  3. 您可以利用框架安全性 - 例如.web.xml安全标记,EJB安全注释.因为JAAS是一种标准的身份验证方式,所以您可以确保采用未来的技术会更容易,因为所有严肃的技术都将支持JAAS(Spring安全等).如果您的软件计划增长,您肯定需要一个标准.

  4. 它将为您节省时间和精力.JAAS提供身份验证和授权,在几分钟内可以整齐地打包和配置.

  5. 我建议您进一步阅读J2EE安全性,或者在OWASP指南中找到更多资源.