- 浏览: 243214 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (192)
- 技术研究学习 (19)
- 工作总结 (4)
- spring3.x (11)
- mail (2)
- jar (2)
- FCKeditor (1)
- quartz (2)
- json (1)
- jdbc (5)
- struts2 (6)
- java基础 (18)
- jboss (3)
- IT名称解析 (1)
- 测试工具 (2)
- 工作趣谈 (1)
- 数据库 (8)
- js (8)
- jquery (1)
- mysql (20)
- Sql (3)
- Oracle (1)
- easyui (0)
- log4j (1)
- 源码研究 (1)
- Jasper Report (0)
- Jbpm4 (4)
- xml (1)
- ireport (0)
- javavm (1)
- sitemesh (5)
- compass (1)
- jvm (1)
- ext (1)
- lucene (0)
- cxf (1)
- Blazeds (0)
- Resteasy (1)
- jaxb (1)
- tomcat (1)
- Rmi (1)
- BoneCP (1)
- velocity (3)
- OSCache (1)
- EHCache (1)
- 高性能开发 (9)
- 设计模式 (0)
- 网络协议应用 (1)
- Ibatis (1)
- powerdesigner (1)
- 架构师之路 (2)
- memcached (4)
- MapReduce (1)
- 测试组 (1)
- 图像处理 (2)
- LoadRunner (2)
- 报表 (1)
- 负载均衡 (1)
- 分布式 (3)
- c# (1)
- java中一些特殊问题 (3)
- java 8 (1)
- Mogodb (1)
- 项目设计与实现 (2)
- Ubuntu (1)
- eclipse (1)
- gradle (1)
- 私有云 (1)
- redis (1)
- 移动前端 (1)
最新评论
Java Authentication Authorization Service(JAAS,Java验证和授权API)提供了灵活和可伸缩的机制来保证客户端或服务器端的Java程序。Java早期的安全框架强调的是通过验证代码的来源和作者,保护用户避免受到下载下来的代码的攻击。JAAS强调的是通过验证谁在运行代码以及他/她的权限来保护系统面受用户的攻击。它让你能够将一些标准的安全机制,例如Solaris NIS(网络信息服务)、Windows NT、LDAP(轻量目录存取协议),Kerberos等通过一种通用的,可配置的方式集成到系统中。
Java Authentication Authorization Service(JAAS,Java验证和授权API)提供了灵活和可伸缩的机制来保证客户端或服务器端的Java程序。Java早期的安全框架强调的是通过验证代码的来源和作者,保护用户避免受到下载下来的代码的攻击。JAAS强调的是通过验证谁在运行代码以及他/她的权限来保护系统面受用户的攻击。它让你能够将一些标准的安全机制,例如Solaris NIS(网络信息服务)、Windows NT、LDAP(轻量目录存取协议),Kerberos等通过一种通用的,可配置的方式集成到系统中。
JAAS简介
Java安全框架最初集中在保护用户运行潜在的不可信任代码,是基于代码的来源(URL)和谁创建的代码(certificate)来给移动代码进行授权。Java 2 SDK 1.3引入了JAAS( Java Authentication and Authorization Service),增加了基于用户的访问控制能力,即根据谁在运行代码来进行授权。JAAS已经整合进了Java 2 SDK 1.4,作为标准的用户认证与授权模型。编辑本段JAAS用户认证框架 JAAS认证被实现为可插入的方式,允许应用程序同底层的具体认证技术保持独立,新增或者更新认证方法并不需要更改应用程序本身。应用程序通过实例化LoginContext对象开始认证过程,引用配置文件中的具体认证方法,即LoginModule对象,来执行认证。
JAAS:可插入式认证 一旦执行代码的用户通过了认证,JAAS授权组件将和核心Java访问控制模型一起工作,来保护对敏感资源的访问。从J2SDK 1.4开始,访问控制不仅基于代码的来源和签名者(CodeSource),而且还要检查谁在运行代码。执行代码的用户被表现为Subject对象,如果LoginModule认证成功,Subject对象被更新为相应的Principals和credentials。
1.1. 一个简单的例子 本节通过一个简单的例子介绍JAAS开发的基本步骤。本节中的范例位于Apusic应用服务器安装目录中的docs/samples/jaas/simple目录。有关范例的内容、编译、部署与运行,可参考docs/samples/jaas/simple目录下的readme.txt文件。
范例程序的代码分为两部分,一部分为主程序,执行用户认证过程,源程序如下: 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); } }
1.2. JAAS核心类和接口
JAAS相关的核心类和接口分为三类,公共、认证和授权。
公共类:Subject,,Principal,Credential
认证类和接口:LoginContext,LoginModule,CallbackHandler,Callback 授权类 :Policy,AuthPermission,PrivateCredentialPermission
详细的描述请参考《JAAS Reference Guide》。
1.3. 配置LoginModules
JAAS认证被实现为一种可插入的方式,系统管理员可以通过配置文件为每一个应用程序配置LoginModuls来决定应用程序使用的认证技术。配置信息可以保存在文件或数据库中,通过javax.security.auth.login.Configuration对象进行读取。javax.security.auth.login.Configuration为抽象类,JDK提供了可实例化的子类com.sun.security.auth.login.ConfigFile,从文件中读取配置信息。配置文件中包含一个或多个条目,每一个条目指明了特定应用程序使用的认证方法。条目的结构如下: <name used by application to refer to this entry> { <LoginModule> <flag> <LoginModule options>; <optional additional LoginModules, flags and options>; }; 可以看出,每一个条目由名字和一个或多个LoginModule组成。范例程序使用的配置文件login.conf内容如下: CountFiles { com.apusic.security.auth.login.ClientPasswordLoginModule required; }; 详细的描述信息可以参考Configuration。
1.4. 编写Policy文件
JAAS授权扩展了现有的Java安全体系结构,在给代码授权时可以包括一个多个Principal域,指出Principal代表的用户执行特定的代码时,具有分配的权限。因此,授权声明的基本形式为:
grant <signer(s) field>, <codeBase URL> <Principal field(s)> { permission perm_class_name "target_name", "action"; .... permission perm_class_name "target_name", "action"; }; 缺省的策略文件实现和策略文件语法请参考《Default Policy Implementation and Policy File Syntax》。
范例程序使用的策略文件policy.jaas内容如下:
grant codeBase "file:./build" {
permission java.security.AllPermission; };
grant codeBase "file:/${apusic.home}/lib/apusic.jar" { permission java.security.AllPermission; };
grant codeBase "file:./build/actions" Principal com.apusic.security.PrincipalImpl "admin" {
permission java.io.FilePermission "<<ALL FILES>>", "read"; }; 可以看出,给主程序和apusic.jar授予了所有权限;当执行具体操作的用户为“admin”时,授予了读取所有文件的权限。
25.1.5. 运行范例程序
范例程序提供了ant的build.xml脚本,请用户自己下载并安装ant。运行范例程序的步骤为: 首先启动Apusic应用服务器, 范例程序将登录服务器。 编译、运行程序。在simple目录下执行ant命令,会编译源程序CountFiles.java到build目录下,编译源程序CountFilesAction.java到build/actions目录下。然后会自动运行程序,相当于在命令行敲入下面的java命令: java -classpath %APUSIC_HOME%/lib/apusic.jar;./build;./build/actions -Djava.security.manager -Djava.security.policy==policy.jaas -Djava.security.auth.login.config==login.conf -Dapusic.home=%APUSIC_HOME% samples.CountFiles 根据提示输入服务器,用户名和口令。 如果用“admin”登录,程序将正常运行结束,若使用其他用户名登录,将抛出访问控制异常。
Java Authentication Authorization Service(JAAS,Java验证和授权API)提供了灵活和可伸缩的机制来保证客户端或服务器端的Java程序。Java早期的安全框架强调的是通过验证代码的来源和作者,保护用户避免受到下载下来的代码的攻击。JAAS强调的是通过验证谁在运行代码以及他/她的权限来保护系统面受用户的攻击。它让你能够将一些标准的安全机制,例如Solaris NIS(网络信息服务)、Windows NT、LDAP(轻量目录存取协议),Kerberos等通过一种通用的,可配置的方式集成到系统中。
JAAS简介
Java安全框架最初集中在保护用户运行潜在的不可信任代码,是基于代码的来源(URL)和谁创建的代码(certificate)来给移动代码进行授权。Java 2 SDK 1.3引入了JAAS( Java Authentication and Authorization Service),增加了基于用户的访问控制能力,即根据谁在运行代码来进行授权。JAAS已经整合进了Java 2 SDK 1.4,作为标准的用户认证与授权模型。编辑本段JAAS用户认证框架 JAAS认证被实现为可插入的方式,允许应用程序同底层的具体认证技术保持独立,新增或者更新认证方法并不需要更改应用程序本身。应用程序通过实例化LoginContext对象开始认证过程,引用配置文件中的具体认证方法,即LoginModule对象,来执行认证。
JAAS:可插入式认证 一旦执行代码的用户通过了认证,JAAS授权组件将和核心Java访问控制模型一起工作,来保护对敏感资源的访问。从J2SDK 1.4开始,访问控制不仅基于代码的来源和签名者(CodeSource),而且还要检查谁在运行代码。执行代码的用户被表现为Subject对象,如果LoginModule认证成功,Subject对象被更新为相应的Principals和credentials。
1.1. 一个简单的例子 本节通过一个简单的例子介绍JAAS开发的基本步骤。本节中的范例位于Apusic应用服务器安装目录中的docs/samples/jaas/simple目录。有关范例的内容、编译、部署与运行,可参考docs/samples/jaas/simple目录下的readme.txt文件。
范例程序的代码分为两部分,一部分为主程序,执行用户认证过程,源程序如下: 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); } }
1.2. JAAS核心类和接口
JAAS相关的核心类和接口分为三类,公共、认证和授权。
公共类:Subject,,Principal,Credential
认证类和接口:LoginContext,LoginModule,CallbackHandler,Callback 授权类 :Policy,AuthPermission,PrivateCredentialPermission
详细的描述请参考《JAAS Reference Guide》。
1.3. 配置LoginModules
JAAS认证被实现为一种可插入的方式,系统管理员可以通过配置文件为每一个应用程序配置LoginModuls来决定应用程序使用的认证技术。配置信息可以保存在文件或数据库中,通过javax.security.auth.login.Configuration对象进行读取。javax.security.auth.login.Configuration为抽象类,JDK提供了可实例化的子类com.sun.security.auth.login.ConfigFile,从文件中读取配置信息。配置文件中包含一个或多个条目,每一个条目指明了特定应用程序使用的认证方法。条目的结构如下: <name used by application to refer to this entry> { <LoginModule> <flag> <LoginModule options>; <optional additional LoginModules, flags and options>; }; 可以看出,每一个条目由名字和一个或多个LoginModule组成。范例程序使用的配置文件login.conf内容如下: CountFiles { com.apusic.security.auth.login.ClientPasswordLoginModule required; }; 详细的描述信息可以参考Configuration。
1.4. 编写Policy文件
JAAS授权扩展了现有的Java安全体系结构,在给代码授权时可以包括一个多个Principal域,指出Principal代表的用户执行特定的代码时,具有分配的权限。因此,授权声明的基本形式为:
grant <signer(s) field>, <codeBase URL> <Principal field(s)> { permission perm_class_name "target_name", "action"; .... permission perm_class_name "target_name", "action"; }; 缺省的策略文件实现和策略文件语法请参考《Default Policy Implementation and Policy File Syntax》。
范例程序使用的策略文件policy.jaas内容如下:
grant codeBase "file:./build" {
permission java.security.AllPermission; };
grant codeBase "file:/${apusic.home}/lib/apusic.jar" { permission java.security.AllPermission; };
grant codeBase "file:./build/actions" Principal com.apusic.security.PrincipalImpl "admin" {
permission java.io.FilePermission "<<ALL FILES>>", "read"; }; 可以看出,给主程序和apusic.jar授予了所有权限;当执行具体操作的用户为“admin”时,授予了读取所有文件的权限。
25.1.5. 运行范例程序
范例程序提供了ant的build.xml脚本,请用户自己下载并安装ant。运行范例程序的步骤为: 首先启动Apusic应用服务器, 范例程序将登录服务器。 编译、运行程序。在simple目录下执行ant命令,会编译源程序CountFiles.java到build目录下,编译源程序CountFilesAction.java到build/actions目录下。然后会自动运行程序,相当于在命令行敲入下面的java命令: java -classpath %APUSIC_HOME%/lib/apusic.jar;./build;./build/actions -Djava.security.manager -Djava.security.policy==policy.jaas -Djava.security.auth.login.config==login.conf -Dapusic.home=%APUSIC_HOME% samples.CountFiles 根据提示输入服务器,用户名和口令。 如果用“admin”登录,程序将正常运行结束,若使用其他用户名登录,将抛出访问控制异常。
发表评论
-
struts2.1.3前后过滤器的区别
2013-03-11 12:38 828来源:http://blog.sina.com.c ... -
Struts2配置文件讲解
2012-09-14 19:23 801[size=large][/size][color=green ... -
struts2 文件上传 文件大小配置问题
2012-09-13 19:57 4153原文来自:http://blog.sina.com.cn/s/ ... -
struts2拦截器执行顺序问题
2012-08-15 10:15 1130struts.xml 中集成了 default-struts. ... -
拦截器详解
2012-08-15 10:16 1083文章来自javaeye的黑暗浪子:http://darkran ...
相关推荐
JAAS 本身包括文档和一个lib 目录,其中只有一个jar 文件(jaas.jar)。
JAAS是对原有Java 2安全框架的一个重要补充。本文较全面地介绍了JAAS的特点、组成及其在Jay。安全编程中的应 用。并简单分析了一个例子,该例经扩充后可直接应用于实践
JAAS(Java Authentication and Authentication Service Jay,认证和授权服务)是Java安全编程的一个重要补 充。它提供了根据验证主题身份来验证主题和授权资源访问的标准方法。本文较全面地介绍了JAAS的特点、组成 ...
这是我曾经做过的一个实验的代码,关于JAAS的简单登录模块的实现,比较简单很适合像我一样的初学者,很高兴和大家分享,一起进步!
它让你能够将一些标准的安全机制,例如Solaris NIS(网络信息服务)、Windows NT、LDAP(轻量目录存取协议),Kerberos等通过一种通用的,可配置的方式集成到系统中。本文首先向你介绍JAAS验证中的一些核心部分,...
这是一个ldap用户和websphere集成的例子 与sso有关系
它让你能够将一些标准的安全机制,例如 Solaris NIS(网络信息服务)、Windows NT、LDAP(轻量目录存取协议),Kerberos等通过一种通用的,可配置的方式集成到系统中。本文首先向你介绍JAAS 验证中的一些核心部分,...
文件中包含 已配置好的tomcat7和jass示例 打包部署后即可运行 还有一份说明文档 tomcat配置的是mac版的,如果是windows的系统请自行修改tomcat启动参数
JAAS In Action,这是一本没有公开发表的书,但是里面介绍JAAS的基本概念还是很精彩的。 1. Introducing JAAS JAAS, the Java Authentication and Authorization Service, has been a standard part of the Java ...
本文件是《jaas in action》一书的代码部分,下载《jaas in action》一书请查看本人发布的资源
jaas in action 是国外比较详细的介绍jaas机制的书籍之一。
这是一本介绍Jaas的书,这本书作者还没出版,不过据说不错.
一本介绍JAAS体系架构的好书,本书开始详细阐述了JAAS的体系架构和相关概念,后半部分用了大量的例子教读者如何配置并实现自己的JAAS模块,尤其最后详细介绍了JAAS在WEB应用中如何配置实现,对当前大量的B/S开发人员...
Access原始码Jaas登录模块 描述 通过JAAS框架针对LDAP数据存储库对用户进行授权和认证的模块。 已经创建了两个测试类,可以用作创建新连接器的模板 安装 编译项目: mvn clean package 将生成的jar文件复制到项目类...
本示例利用JBoss提供的JAAS支持,通过很简单的代码实现了登录和访问控制,能够很好的从一个应用移植到另一个应用(当然仅限JBoss环境),只要修改一些xml和数据库的配置就可以了。 本示例用了一些hibernate的东西读取...
朋友-贾斯一个小的库,可帮助Chas Emerick的Friend库使用JAAS。使用范例这是一段代码,显示了该库中jaas-credential-fn函数的用法。 ( let [get-roles-fn ( fn [username] #{ ::user }) jaas-credential-fn* ( ...
一个使用mongodb作为用户和角色数据库的Karaf JAAS模块。 安装 安装非常简单,仅要安装的两个模块是mongo驱动程序本身和mongo jaas登录模块。 # install mongo driver karaf@root > osgi:install -s mvn:org....
NULL 博文链接:https://jxee.iteye.com/blog/1670378
具有安全性的Spring Cloud Stream Multi-binder Kafka应用程序(JAAS) 这是一个示例应用程序,演示了如何使用多个绑定器启用安全性的情况下连接到多个kafka群集。 该应用程序使用两个Kafka集群,并且都通过安全性...