Java Authentication Authorization Service(JAAS,Java验证和授权API)提供了灵活和可伸缩的机制来保证客户端或服务器端的Java程序。Java早期的安全框架强调的是通过验证代码的来源和作者,保护用户避免受到下载下来的代码的攻击。JAAS强调的是通过验证谁在运行代码以及他/她的权限来保护系统面受用户的攻击。它让你能够将一些标准的安全机制,例如Solaris NIS(网络信息服务)、Windows NT、LDAP(轻量目录存取协议),Kerberos等通过一种通用的,可配置的方式集成到系统中。 你是否曾经需要为一个应用程序实现登录模块呢?如果你是一个比较有经验的程序员,相信你这样的工作做过很多次,而且每次都不完全一样。你有可能把你的登录模块建立在Oracle数据库的基础上,也有可能使用的是NT的用户验证,或者使用的是LDAP目录。如果有一种方法可以在不改变应用程序级的代码的基础上支持上面提到的所有这一些安全机制,对于程序员来说一定是一件幸运的事。现在你可以使用JAAS实现上面的目标 
 
 
这是网上介绍的JAAS
如红体字所言
JAAS就是一个实现登录模块的么?
就好比我们登录CSDN一样要账号密码看了一早上的JAAS
知道了一点JAAS结构和核心类,接口
但发现最基本的JAAS是干什么的倒没弄清楚
 
望高手不吝赐教啊

解决方案 »

  1.   

    刚又看了下JAAS强调的是通过验证谁在运行代码以及他/她的权限来保护系统面受用户的攻击
    意思是不是说:
    运行你写的代码的时候得通过身份验证
    也就是说别人没办法运行你的代码
    除非别人知道你的账号密码是这样么?
      

  2.   

    权限,即决定一段代码是否允许运行
    旧的jaas仅用于验证代码的来源即所谓codesource,这是因为早期java就是用于网络,大量从网络来的代码必须强化安全方面。
    但是jaas规范比较蹩脚,虽然是宫力设计的,而且属于java语言的核心,大量java语言内部的操作都涉及到,和java语言方方面面都有很大关联。
    至今jaas的落后和蹩脚没什么改观。
      

  3.   

    Java安全框架最初集中在保护用户运行潜在的不可信任代码,是基于代码的来源(URL)和谁创建的代码(certificate)来给移动代码进行授权。Java 2 SDK 1.3引入了JAAS( Java Authentication and Authorization Service),增加了基于用户的访问控制能力,即根据谁在运行代码来进行授权。JAAS已经整合进了Java 2 SDK 1.4,作为标准的用户认证与授权模型。JAAS认证被实现为可插入的方式,允许应用程序同底层的具体认证技术保持独立,新增或者更新认证方法并不需要更改应用程序本身。应用程序通过实例化LoginContext对象开始认证过程,引用配置文件中的具体认证方法,即LoginModule对象,来执行认证。一旦执行代码的用户通过了认证,JAAS授权组件将和核心Java访问控制模型一起工作,来保护对敏感资源的访问。从J2SDK 1.4开始,访问控制不仅基于代码的来源和签名者(CodeSource),而且还要检查谁在运行代码。执行代码的用户被表现为Subject对象,如果LoginModule认证成功,Subject对象被更新为相应的Principals和credentials。给你个简单的例子 看看吧。。
    package samples;import javax.security.auth.Subject;
    import javax.security.auth.login.LoginContext;
    import javax.security.auth.login.LoginException;
    import com.sun.security.auth.callback.TextCallbackHandler;public class CountFiles {    static LoginContext lc = null;
        public static void main(String[] args) {
            //使用配置文件中名字为“CountFiles”的条目
            try {
               lc = new LoginContext("CountFiles",
                                     new TextCallbackHandler());
            } catch (LoginException le) {
                le.printStackTrace();
                System.exit(-1);
            }         try {
                lc.login();
                //如果没有异常抛出,则表示认证成功
            } catch (Exception e) {
                System.out.println("Login failed: " + e);
                System.exit(-1);
            }        //以认证用户的身份执行代码
            Object o = Subject.doAs(lc.getSubject(), new CountFilesAction());
            System.out.println("User " + lc.getSubject( ) + " found " + o + " files.");
            System.exit(0);
        }
    }
    可以看出,主程序包含了三个重要的步骤:首先构造一个LoginContext对象,然后使用这个对象进行登录,最后,把用户作为doAs方法一个参数。另一部分表示用户想要执行的具体操作,源程序如下:package samples;import java.io.File;
    import java.security.PrivilegedAction;class CountFilesAction implements PrivilegedAction {
        public Object run() {
            File f = new File(".");
            File[] files = f.listFiles();
            return new Integer(files.length);
        }
    }