当公司网络外部的用户需要访问你编写的应用程序或受保护的资源时,很多Java程序员为他们的应用程序创建自己的安全模块。大多数这些模块都是针对具体的应用程序,这样在下一个应用程序需要安全保护时,程序员又重新开始所有工作。构建自己的安全模块的另外一个缺点是,在应用程序变得越来越复杂时,安全需求也会变得很复杂。 使用Java验证和授权服务(JAAS)可以很好地解决上面的问题,你可以用它来管理应用程序的安全性。JAAS具有两个特性:验证(Authentication) 和授权(authorization)。 验证(Authenticaction): 认证是完成用户名和密码的匹配校验;其校验的对象是试图访问受保户系统的用户。在进行校验时,应用服务器会检查用户是否存在于系统之中,以及是否提供了凭证(通常指密码)。 授权(authorization): 用户一旦通过了系统验证,需要与系统进行某种形式的交互。授权就是决定用户是否有授权执行某项操作的过程,授权是基于角色的。 Jboss 服务器提供了安全服务来进行用户认证和根据用户规则来限制对POJO的访问。对每一个POJO来说,你可以使用@SecurityDomain注释为它指定一个安全域,安全域告诉容器到哪里去找密码和用户角色列表。Jboss中的other域指明要到classpath下寻找users.propertes和roles.properties。这样,对每一个方法来说,我们可以使用一个安全限制注释来指定谁可以运行这个方法。比如:以上的例子,容器对所有试图调用AdminUserMethod()的用户进行认证,只允许拥有AdminUser角色的用户运行它。如果你没有登录或者没有以管理员的身份登录,一个安全意外将会抛出。 该例子定义了三种角色,个角色的含义如下: •AdminUser : 系统管理员角色 •DepartmentUser : 个事业部用户角色 •CooperateUser :公司合作伙伴角色 •用户名:xiaoling ; Password : xiaoling •用户名:dawning; Password : dawning •用户名:xiao; Psssword : xiao 使用Jboss默认的安全域other,other安全域高手容器到classpath下的users.properties和roles.properties中寻找密码和用户角色列表。Other安全域定义在[jboss安装目录]/server/default/conf/login-config.xml文件中。 <application-policy name = "other"> <authentication> <login-module code = "org.jboss.security.auth.spi.UsersRolesLoginModule" flag = "required" /> </authentication> </application-policy> Other安全域默认情况下是不允许匿名用户访问的(即必须进行登录,才可以访问),如果你想让匿名用户能够访问@PermitAll注释定义的资源,需要修改other安全配置,修改片段如下: <appliaction-policy name=”other”> <authentication> <login-module code=”org.jboss.security.auth.spi.UsersRolesLoginModule” Flag=”required” /> <!—允许匿名登录- <module-option name=”unauthenticatedIdentity”>AnonymousUser</module-option> </authentication> </application-policy> Jboss 详细案例请参考【EJB3[1].0入门经典-weblogic.pdf】