- 浏览: 864115 次
- 性别:
- 来自: 济南
文章分类
- 全部博客 (280)
- java相关 (29)
- linux系统 (55)
- ipsec (0)
- ssl (3)
- 信息安全 (13)
- web相关 (35)
- windows (9)
- c,c++ (14)
- log4j (3)
- hibernate (8)
- sqlite (1)
- 程序人生 (2)
- js (2)
- 生活点滴 (3)
- 网络相关 (14)
- 问题积累 (15)
- 数据库相关 (27)
- 软件测试 (2)
- PKI相关 (2)
- 程序设计 (7)
- 犄角旮旯 (0)
- 杂七杂八 (0)
- 硬件相关 (14)
- 防火墙 (2)
- 电子商务 (2)
- 多媒体相关 (1)
- 内存管理 (4)
- 面向对象 (1)
- csp (1)
- 驱动开发 (3)
- 移动开发 (2)
- openssl多线程实例 (1)
最新评论
-
xiaoyao3857:
博主很有探索精神嘛,学习了
Linux主机名Hostname详解 -
hiskyrisa:
言简意赅,好文章。
Flex是什么 -
layznet:
犯了类似错误。使用的是derby数据库。driverClass ...
java.sql.SQLException: No suitable driver -
idision:
你好,文章有一句createSubjectKeyId(keyT ...
bouncycastle 产生证书 -
zheng12tian:
代码有全的不?只贴一部分,,,,
在LOG4J中把日志写入远程数据库
今天在论坛上看到JASS,不清楚是什么呢,网上找了一下,受益良多
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
类。
发表评论
-
关于Bad version number in .class file的问题
2010-11-15 14:20 1000关于Bad version number in .class ... -
一个获取文件crc32校验码的简洁的java类
2010-05-12 19:48 3273从jdk1.4开始,java核心包里已经提供对crc计算的支持 ... -
Windows下Apache与Tomcat的整合
2010-05-12 13:52 1077为了完成这个任务,在 ... -
SSL双向认证java实现
2010-05-09 11:35 1797本文通过模拟场景,介 ... -
java.util.ResourceBundle 使用详解
2010-04-28 19:39 854一、认识国际化资源文件 这个类提供软件国际化的捷 ... -
基于JAAS实现登录
2010-04-25 22:11 1261JAAS:Java Authentication and ... -
Java插件技术
2010-04-25 21:31 21461.Java插件技术 Java插件技术(Java Plu ... -
java RMI的例子(转)
2010-04-25 21:11 950参考别人的程序后写了个自己的RMI 程序RMI ,远程方法 ... -
Java安全通信、数字证书及应用实践(转)
2010-04-21 21:05 1674摘要 : 在本文 ... -
Eclips 内存溢出
2010-04-13 16:26 1041在Eclipse 根目录下找到eclipse .ini ... -
Eclipse 启动不起来异常:JVM terminated. Exit code=-1
2010-04-11 10:09 7460Eclipse 启动不起来,出现以下错误: ... -
Java程序员需要了解的几个开源协议介绍
2009-12-21 21:32 1118介绍几个比较常见的开 ... -
apache lucene介绍
2009-12-15 09:16 1948什么是lucene Apache Lucene是一个开放源程序 ... -
Java基础:Java中堆内存与栈内存分配浅析
2009-08-11 20:19 1347Java 把内存划分成两种:一种是栈内存,另一种是堆内存 ... -
对synchronized(this)的一些理解
2009-07-23 10:21 1174一、当两个并发线程访问同一个对象object中的这个synch ... -
Linux下JNI调用
2009-07-09 12:43 1459整个实现过程可以分为五步来完成: 1)写一个声明了nativ ... -
如何在Java中执行其它程序
2009-07-09 12:42 2305在编写Java程序时,有时 ... -
linux下jdk的安装与卸载
2009-07-06 10:46 2105下面是卸载步骤: 用ro ... -
JNI技术小试
2009-06-23 14:28 1232目前 java 与 dll 交互的技术主要有 ... -
java.util.Date和java.sql.Date的区别及应用
2009-06-21 14:35 1135java.util.Date 就是在除了SQL语句的情况下面使 ...
相关推荐
JAAS是Java安全模型的重要组成部分,它允许开发者构建安全的应用程序,满足不同级别的安全需求。 在JAAS中,认证(Authentication)是指验证用户身份的过程,而授权(Authorization)则是确定已认证的用户是否有权...
JAAS允许开发者集成多种标准的安全机制,如Solaris NIS、Windows NT、LDAP和Kerberos等,通过一个通用且可配置的方式。这样,开发者无需修改应用程序的主体代码,就能适应不同的安全需求。JAAS自J2SE 1.3起作为扩展...
### JAAS:灵活的Java安全机制 #### 一、引言 Java Authentication and Authorization Service (JAAS, Java验证和授权API)为Java应用程序提供了一种扩展标准Java 2安全模型的方法。通过添加验证主题(即用户或其他...
总的来说,"Java JAAS安全认证 demo"是一个实用的学习资源,它展示了Java平台内置的安全机制,这对于构建安全的Web应用或企业级服务至关重要。开发者可以通过研究这个示例,掌握在实际项目中实施安全认证的最佳实践...
### 基于JAAS的Java安全编程 #### JAAS概览 JAAS(Java Authentication and Authorization Service,Java认证与授权服务)是Sun Microsystems为Java 2平台开发的一套安全框架扩展,旨在加强Java应用程序的安全性。...
JAAS作为Java安全编程的一个重要组成部分,为开发者提供了一套完整且灵活的安全框架,不仅能够满足不同类型的应用场景,还能够适应不断变化的安全需求。通过深入了解JAAS的核心概念、关键类和编程实践,开发者可以...
JAAS提供了一种标准的方式来实现这一目标,允许开发者在不深入了解底层安全机制的情况下,构建安全的应用程序。 **JAAS 登录验证机制** JAAS的核心概念是登录模块(LoginModule),它是处理用户身份验证逻辑的组件...
本文基于给定的文件信息,深入探讨Java安全机制的关键组成部分及其运作原理。 ### Java安全机制的体系结构 Java安全架构的核心在于其设计时就充分考虑了安全因素,而不是后期添加的。这一设计思路主要体现在以下三...
"Jaas in Action"这本书,虽然目前还未正式出版,但据称会深入探讨JAAS的相关概念和技术,对于理解和应用Java安全机制具有很高的参考价值。 JAAS的主要目标是解决以下几个核心问题: 1. **身份验证...
总结来说,`jaas.jar` 是Java安全基础设施的关键组成部分,它提供了灵活的认证和授权机制,让开发者能够为Java应用程序构建安全的用户访问控制。通过理解和有效利用JAAS,开发者可以更好地保护他们的应用免受未授权...
最后,要在Java应用中启用JAAS,你需要在Java安全策略中指定使用这个配置文件。例如,通过 `-Djava.security.auth.login.config=/path/to/jaas.conf` 参数启动JVM。 以上就是JAAS的基本介绍和示例代码实现。通过...
2. **定义策略**:`demo.policy` 文件是Java安全策略文件,它指定了哪些权限被授予哪个主体(principal)。策略文件使用一种特定的语法,允许开发者精确地控制哪些代码段或用户可以执行特定操作。例如,你可以指定...
JavaEE安全机制是Java平台企业版(Java Enterprise Edition)中至关重要的组成部分,它涉及到一系列确保应用程序安全性的技术、模型和策略。本讲主要探讨以下几个核心主题: 1. **Java安全模型**:Java的安全模型...
JAAS:灵活的Java安全机制 Java Authentication Authorization Service(JAAS,Java验证和授权API)提供了灵活和可伸缩的机制来保证客户端或服务器端的Java程序。Java早期的安全框架强调的是通过验证代码的来源和作者...
- **《Java Security》**: 本书深入介绍了Java平台的安全模型和机制,包括JAAS在内的多个安全框架。 - **Java.net**: 官方网站提供了丰富的JAAS相关文档和技术文章,是学习JAAS的好地方。 - **Oracle官方文档**: ...
描述:Java认证和授权服务(JAAS)供应器JAAs验证机制,探讨了Spring Security如何代理JAAS的认证请求,并详细介绍了JAAS登录配置文件、JaasAuthenticationProvider的配置以及JAAS Callback Handler和JAAS Authority...
Java Authentication and Authorization Service (JAAS) 是Java平台中用于安全认证和授权的核心组件。这个"JAAS.rar_Action!_Jaas_Kerber_jaas_KERBEROS_kerberos_Java_login.a"压缩包文件包含了关于如何在Java环境...
Java Authentication and Authorization Service (JAAS) 是Java平台中用于安全性的关键组件,它提供了一种框架,...通过深入理解并实践这个教程,你将能够更好地掌握Java安全框架,并在你的项目中实施强大的安全策略。
这个框架使得开发者可以轻松地在Java应用程序中集成安全性,而不必深入理解底层的复杂安全机制。JAAS的核心理念是将认证(Authentication)和授权(Authorization)功能模块化,允许开发人员通过插件式的方式进行...