- 浏览: 258033 次
- 性别:
- 来自: 苏州
文章分类
- 全部博客 (289)
- java (72)
- oracle (3)
- mysql (5)
- spring (28)
- hibernate (2)
- osgi (0)
- linux (2)
- ExtJs (1)
- jvm (0)
- mybatis (7)
- 分布式 (11)
- MINA (6)
- apache+tomcat (13)
- js+htm (7)
- android (44)
- http (1)
- hbase+hdoop (0)
- memcache (13)
- search (27)
- 部署及性能 (12)
- mongoDB (2)
- 多线程 (12)
- 安全管理验证 (9)
- struts (1)
- webservice (0)
- easyUI (1)
- spring security (16)
- pattern (6)
- 算法 (2)
最新评论
-
lzh8189146:
CommonsHttpSolrServer这个类,现在是不是没 ...
CommonsHttpSolrServer -
xiaochanzi:
我按照你的方法试了下,tomcat6可以发布,但是访问任何网页 ...
基于内嵌Tomcat的应用开发 -
phoneeye:
麻烦你,如果是抄来的文章,请给出来源。谢谢
ant 两则技巧 -
neverforget:
转载不注明出处
Spring Security3.1登陆验证 替换 usernamepasswordfilter -
liang1022:
若不使用eclipse ,如何在命令行下 运行服务端程序 ?
WebService CXF学习(入门篇2):HelloWorld
参考http://www.iteye.com/topic/366944
Java Authentication Authorization Service(JAAS,Java验证和授权API)提供了灵活和可伸缩的机制来保证客户端或服务器端的Java程序。Java早期的安全框架强调的是通过验证代码的来源和作者,保护用户避免受到下载下来的代码的攻击。JAAS强调的是通过验证谁在运行代码以及他/她的权限来保护系统面受用户的攻击。它让你能够将一些标准的安全机制,例如Solaris NIS(网络信息服务)、Windows NT、LDAP(轻量目录存取协议),Kerberos等通过一种通用的,可配置的方式集成到系统中。
你是否曾经需要为一个应用程序实现登录模块呢?如果你是一个比较有经验的程序员,相信你这样的工作做过很多次,而且每次都不完全一样。你有可能把你的登录模块建立在Oracle数据库的基础上,也有可能使用的是NT的用户验证,或者使用的是LDAP目录。如果有一种方法可以在不改变应用程序级的代码的基础上支持上面提到的所有这一些安全机制,对于程序员来说一定是一件幸运的事。
现在你可以使用JAAS实现上面的目标。JAAS是一个比较新的的Java API。在J2SE 1.3中,它是一个扩展包;在J2SE 1.4中变成了一个核心包。在本文中,我们将介绍JAAS的一些核心概念,然后通过例子说明如何将JAAS应用到实际的程序中。本文的例子是根据我们一个基于Web的Java应用程序进行改编的,在这个例子中,我们使用了关系数据库保存用户的登录信息。由于使用了JAAS,我们实现了一个健壮而灵活的登录和身份验证模块。
客户端和服务器端的JAAS
开发人员可以将JAAS应用到客户端和服务器端。在客户端使用JAAS很简单。在服务器端使用JAAS时情况要复杂一些。目前在应用服务器市场中的JAAS产品还不是很一致,使用JAAS的J2EE应用服务器有一些细微的差别。例如JBossSx使用自己的结构,将JAAS集成到了一个更大的安全框架中;而虽然WebLogic 6.x也使用了JAAS,安全框架却完全不一样。现在你能够理解为什么我们需要从客户端和服务器端的角度来看JAAS了。
我们将在后面列出两种情况下的例子。为了使服务器端的例子程序更加简单,我们使用了Resin应用服务器。
核心JAAS类
在使用JAAS之前,你首先需要安装JAAS。在J2SE 1.4中已经包括了JAAS,
但是在J2SE 1.3中没有。如果你希望使用J2SE 1.3,你可以从SUN的官方站点上
下载JAAS。当正确安装了JAAS后,你会在安装目录的lib目录下找到jaas.jar。
你需要将该路径加入Classpath中。(注:如果你安装了应用服务器,其中就已
经包括了JAAS,请阅读应用服务器的帮助文档以获得更详细的信息)。在Java
安全属性文件java.security中,你可以改变一些与JAAS相关的系统属性。该文
件保存在<jre_home>/lib/security目录中。
在应用程序中使用JAAS验证通常会涉及到以下几个步骤:
1. 创建一个LoginContext的实例。
2. 为了能够获得和处理验证信息,将一个CallBackHandler对象作为参数
传送给LoginContext。
3. 通过调用LoginContext的login()方法来进行验证。
4. 通过使用login()方法返回的Subject对象实现一些特殊的功能(假设
登录成功)。
下面是一个简单的例子:
LoginContext lc = new LoginContext("MyExample");
try {
lc.login();
} catch (LoginException) {
// Authentication failed.
}
// Authentication successful, we can now continue.
// We can use the returned Subject if we like.
Subject sub = lc.getSubject();
Subject.doAs(sub, new MyPrivilegedAction());
在运行这段代码时,后台进行了以下的工作。
1. 当初始化时,LoginContext对象首先在JAAS配置文件中找到MyExample
项,然后更具该项的内容决定该加载哪个LoginModule对象(参见图二)。
2. 在登录时,LoginContext对象调用每个LoginModule对象的login()方
法。
3. 每个login()方法进行验证操作或获得一个CallbackHandle对象。
4. CallbackHandle对象通过使用一个或多个CallBack方法同用户进行交互
,获得用户输入。
5. 向一个新的Subject对象中填入验证信息。
我们将对代码作进一步的解释。但是在这之前,让我们先看代码中涉及到
的核心JAAS类和接口。这些类可以被分为三种类型:
普通类型 Subject,Principal,凭证
验证 LoginContext,LoginModule,CallBackHandler,Callback
授权 Policy,AuthPermission,PrivateCredentialPermission
上面列举的类和接口大多数都在javax.security.auth包中。在J2SE 1.4中
,还有一些接口的实现类在com.sun.security.auth包中。
普通类型:Subject,Principal,凭证
Subject类代表了一个验证实体,它可以是用户、管理员、Web服务,设备
或者其他的过程。该类包含了三中类型的安全信息:
身份(Identities):由一个或多个Principal对象表示
公共凭证(Public credentials):例如名称或公共秘钥
私有凭证(Private credentials):例如口令或私有密钥
Principal对象代表了Subject对象的身份。它们实现了java.security.Principal
和java.io.Serializable接口。在Subject类中,最重要的方法是getName()
。该方法返回一个身份名称。在Subject对象中包含了多个Principal对象,因
此它可以拥有多个名称。由于登录名称、身份证号和Email地址都可以作为用户
的身份标识,可见拥有多个身份名称的情况在实际应用中是非常普遍的情况。
在上面提到的凭证并不是一个特定的类或借口,它可以是任何对象。凭证
中可以包含任何特定安全系统需要的验证信息,例如标签(ticket),密钥或
口令。Subject对象中维护着一组特定的私有和公有的凭证,这些凭证可以通过
getPrivateCredentials()和getPublicCredentials()方法获得。这些方法
通常在应用程序层中的安全子系统被调用。
验证:LoginContext
在应用程序层中,你可以使用LoginContext对象来验证Subject对象。LoginContext
对象同时体现了JAAS的动态可插入性(Dynamic Pluggability),因为当你创
建一个LoginContext的实例时,你需要指定一个配置。LoginContext通常从一
个文本文件中加载配置信息,这些配置信息告诉LoginContext对象在登录时使
用哪一个LoginModule对象。
下面列出了在LoginContext中经常使用的三个方法:
login () 进行登录操作。该方法激活了配置中制定的所有LoginModule对
象。如果成功,它将创建一个经过了验证的Subject对象;否则抛出LoginException
异常。
getSubject () 返回经过验证的Subject对象
logout () 注销Subject对象,删除与之相关的Principal对象和凭证
验证:LoginModule
LoginModule是调用特定验证机制的接口。J2EE 1.4中包含了下面几种LoginModule
的实现类:
JndiLoginModule 用于验证在JNDI中配置的目录服务
Krb5LoginModule 使用Kerberos协议进行验证
NTLoginModul 使用当前用户在NT中的用户信息进行验证
UnixLoginModule 使用当前用户在Unix中的用户信息进行验证
同上面这些模块绑定在一起的还有对应的Principal接口的实现类,例如NTDomainPrincipal
和UnixPrincipal。这些类在com.sun.security.auth包中。
LoginModule接口中包含了五个方法:
initialize () 当创建一LoginModule实例时会被构造函数调用
login () 进行验证
commit () 当LgoninContext对象接受所有LoginModule对象传回的结果后
将调用该方法。该方法将Principal对象和凭证赋给Subject对象。
abort () 当任何一个LoginModule对象验证失败时都会调用该方法。此时
没有任何Principal对象或凭证关联到Subject对象上。
logout () 删除与Subject对象关联的Principal对象和凭证。
在应用程序的代码中,程序员通常不会直接调用上面列出的方法,而是通
过LigonContext间接调用这些方法。
验证:CallbackHandler和Callback
CallbackHandler和Callback对象可以使LoginModule对象从系统和用户那
里收集必要的验证信息,同时独立于实际的收集信息时发生的交互过程。
JAAS在javax.sevurity.auth.callback包中包含了七个Callback的实现类
和两个CallbackHandler的实现类:ChoiceCallback、ConfirmationCallback、
LogcaleCallback、NameCallback、PasswordCallback、TextInputCallback、
TextOutputCallback、DialogCallbackHandler和TextCallBackHandler。Callback
接口只会在客户端会被使用到。我将在后面介绍如何编写你自己的CallbackHandler
类。
发表评论
-
Java keytool 安全证书学习笔记
2012-08-02 14:16 793http://linliangyi2007.iteye.com ... -
java国际化
2012-07-16 14:08 408http://lavasoft.blog.51cto.com/ ... -
Java版远程控制V1.0
2012-06-17 21:37 746http://www.cnblogs.com/syxchina ... -
浅析Java中CountDownLatch用法
2012-05-16 20:57 791CountDownLatch如其所写,是一个 ... -
SMTP发送邮件
2012-04-18 09:41 753SMTP发送邮件 openkk 2011-06-0 ... -
smtp 返回代码 信息
2012-04-18 08:52 1440SMTP Server Response Cod ... -
JavaMail详解
2012-04-18 02:24 0JavaMail详解 博客分类: JAV ... -
安装Eclipse反编译插件
2012-04-17 09:34 797安装Eclipse反编译插件 博客分类: ... -
Java编程中“为了性能”尽量要做到的一些地方
2012-04-13 08:30 658最近的机器内存又爆满了,除了新增机器内存外,还应该好好r ... -
Dijkstra算法
2012-04-11 08:00 859Dijkstra算法 博客分类: 算 ... -
java 播放音乐
2012-04-11 08:00 992java 播放音乐 博客分类: J2 ... -
Java中的native,transient,volatile和strictfp关键字
2012-04-06 08:49 725Java中的native,transient,v ... -
用ReentrantLock模拟宴会的热闹情景
2012-04-05 08:32 898用ReentrantLock模拟宴会的热闹情景 ... -
Hashmap 分析
2012-04-05 08:32 724Hashmap 博客分类: 算法 ... -
ExecutorService线程池
2012-04-05 08:32 752ExecutorService线程池 (2010 ... -
Java并发:juc Executor框架详解
2012-04-05 08:32 773Java并发:juc Executor ... -
java并发包,多线程,工具类,笔记
2012-04-11 08:00 891JDK 线程池 Executors.newCachedT ... -
利用 Spring 和 EHCache 做方法缓存处理〔转〕
2012-04-09 09:49 832利用 Spring 和 EHCache 做方法缓存处理〔 ... -
EhCache使用详细介绍
2012-04-09 09:49 1344EhCache使用详细介绍 Ehcache中不仅可 ... -
HashMap 分析
2012-04-01 08:21 1893http://www.blogjava.net ...
相关推荐
下面将详细介绍JAAS的工作原理、主要组成部分以及如何通过示例代码实现它。 JAAS的设计是模块化的,这意味着它能够适应各种不同的认证机制,如密码、数字证书等。其工作流程通常包括以下几个步骤: 1. **配置**:...
在本次演示中,我们将详细介绍JAAS的认证流程,以及如何利用Java 2 Policy文件来增强安全性。 #### 六、JAAS认证流程 1. **初始化LoginContext**:创建LoginContext实例时需指定一个Configuration对象,该对象包含...
### JAAS登录验证知识点 #### 一、JAAS概述 Java Authentication and Authorization Service(JAAS)是Java平台...以上介绍的是JAAS登录验证的基本流程和技术要点,实际应用中可能还需要根据具体需求进行扩展和定制。
- `jaas-in-action_chapter01-05.pdf`: 可能介绍了JAAS的基础概念和架构。 - `jaas-in-action_chapter02-05.pdf`: 可能深入解析了登录模块和配置文件。 - `jaas-in-action_chapter03-02.pdf` 和 `jaas-in-action_...
#### 三、JAAS的核心类介绍 ##### 1. 公共类 公共类是由JAAS认证和授权部分共同使用的类,其中最重要的是`Subject`类。`Subject`类封装了一个主体的相关信息,包括标识、公有凭据、私有凭据等。 - **Subject 类**...
书中可能详细介绍了Subject的使用以及如何从Subject中获取和管理认证信息。 第五,JAAS的跨域认证也是重要的主题,例如,如何在不同应用之间共享用户认证状态,实现单点登录(SSO)。这可能涉及到票证验证协议,如...
描述:Java认证和授权服务(JAAS)供应器JAAs验证机制,探讨了Spring Security如何代理JAAS的认证请求,并详细介绍了JAAS登录配置文件、JaasAuthenticationProvider的配置以及JAAS Callback Handler和JAAS Authority...
JAAS:灵活的Java安全机制 Java Authentication Authorization Service(JAAS,Java验证和授权API)提供了灵活和可伸缩的机制来...本文首先向你介绍JAAS验证中的一些核心部分,然后通过例子向你展示如何开发登录模块。
- **《Java Security》**: 本书深入介绍了Java平台的安全模型和机制,包括JAAS在内的多个安全框架。 - **Java.net**: 官方网站提供了丰富的JAAS相关文档和技术文章,是学习JAAS的好地方。 - **Oracle官方文档**: ...
1. **基础理论**:书中可能首先介绍了JAAS的基本概念,如认证主体(principal)、认证模块(login module)、授权策略(authorization policy)等,这些都是理解JAAS运作的基础。 2. **JAAS架构**:JAAS的模块化...
JAAS In Action,这是一本没有公开发表的书,但是里面介绍JAAS的基本概念还是很精彩的。 1. Introducing JAAS JAAS, the Java Authentication and Authorization Service, has been a standard part of the Java ...
一本介绍JAAS体系架构的好书,本书开始详细阐述了JAAS的体系架构和相关概念,后半部分用了大量的例子教读者如何配置并实现自己的JAAS模块,尤其最后详细介绍了JAAS在WEB应用中如何配置实现,对当前大量的B/S开发人员...
这份材料似乎是一份教学幻灯片的摘要,重点介绍了JAAS的基本概念、登录上下文(LoginContext)、回调处理器(CallbackHandler)、以及登录模块(LoginModule)等内容。 ### JAAS简介 JAAS是Java平台提供的一个认证...
博主可能在博客中详细介绍了如何配置和使用JAAS来保护应用程序,包括设置用户认证模块、定义安全角色、实现登录界面和处理权限控制等。 标签“源码”和“工具”暗示了压缩包可能包含了源代码文件和可能用到的一些...
在"JAASDemo.pdf"文件中,可能详细介绍了如何创建一个简单的LoginModule,如何配置jaas.conf文件,以及如何在Java代码中集成JAAS进行用户登录和权限控制。文件可能会提供一个示例程序,演示了从用户输入读取凭证,...
第10章介绍Java安全体系结构、密钥、消息摘要、数字签名、访问控制、安全套接口SSL、主体身份认证JAAS和公共密钥构架PKI技术。第11章简明地介绍移动代理编程技术。, 本书可作为高校计算机应用、网络信息、电子商务...
第10章介绍Java安全体系结构、密钥、消息摘要、数字签名、访问控制、安全套接口SSL、主体身份认证JAAS和公共密钥构架PKI技术。第11章简明地介绍移动代理编程技术。 本书可作为高校计算机应用、网络信息、电子商务...