一 什么是JAAS
Java 认证和授权服务”(Java Authentication and Authorization Service,JAAS)是对 Java 2 SDK 的扩展。
JAAS 可分Authentication和Authorization 。
1) Authentication:认证用户身份。看哪个用户在执行代码。通俗的来说就是哪个用户在执行操作。这个操作可能在某个application或bean或servlet上.
2) Authorization : 授权用户操作。也就是验证用户是否对指定资源有特定访问权限。好比某一用户是否有对指定文件的读取权限。
二 常用接口
CallbackHandler:用去用户信息,用于验证用户身份。
LoginModule:用于验证用户信息。
三 简单Demo
MyCallbackHandler.java
package authentication; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import javax.security.auth.callback.Callback; import javax.security.auth.callback.CallbackHandler; import javax.security.auth.callback.NameCallback; import javax.security.auth.callback.PasswordCallback; import javax.security.auth.callback.UnsupportedCallbackException; public class MyCallbackHandler implements CallbackHandler { @Override public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { for(Callback callback:callbacks){ if(callback instanceof NameCallback){ NameCallback nameCallback=(NameCallback)callback; String prompt=nameCallback.getPrompt(); System.err.print(prompt); nameCallback.setName(new BufferedReader(new InputStreamReader(System.in)).readLine()); } if(callback instanceof PasswordCallback){ PasswordCallback passwordCallback=(PasswordCallback)callback; String prompt=passwordCallback.getPrompt(); System.err.print(prompt); passwordCallback.setPassword(new BufferedReader(new InputStreamReader(System.in)).readLine().toCharArray()); } } } }
SampleLoginModule.java
package authentication; import java.util.Map; import javax.security.auth.Subject; import javax.security.auth.callback.Callback; import javax.security.auth.callback.CallbackHandler; import javax.security.auth.callback.NameCallback; import javax.security.auth.callback.PasswordCallback; import javax.security.auth.login.LoginException; import javax.security.auth.spi.LoginModule; public class SampleLoginModule implements LoginModule { // initial state private Subject subject; private CallbackHandler callbackHandler; private Map sharedState; private Map options; // configurable option private boolean debug = false; // username and password private String username; private char[] password; public void initialize(Subject subject, CallbackHandler callbackHandler, Map sharedState, Map options) { this.subject = subject; this.callbackHandler = callbackHandler; this.sharedState = sharedState; this.options = options; // initialize any configured options debug = "true".equalsIgnoreCase((String)options.get("debug")); } public boolean login() throws LoginException { Callback[] callbacks = new Callback[2]; callbacks[0] = new NameCallback("user name: "); callbacks[1] = new PasswordCallback("password: ", false); try { callbackHandler.handle(callbacks); } catch (Exception e) { throw new RuntimeException(e); } username = ((NameCallback)callbacks[0]).getName(); password = ((PasswordCallback)callbacks[1]).getPassword(); if("admin".equals(username)&&"admin".equals(new String(password))){ return true; } return false; } public boolean commit() throws LoginException { System.out.println(" =========== commit =========="); return true; } public boolean abort() throws LoginException { System.out.println(" =========== abort =========="); return true; } @Override public boolean logout() throws LoginException { System.out.println(" =========== logout =========="); return true; } }
SampleAcn.java
package authentication; import javax.security.auth.login.LoginContext; public class SampleAcn { public static void main(String[] args) throws Exception { LoginContext lc = new LoginContext("sample",new MyCallbackHandler()); lc.login(); } }
sample_jaas.config
sample { authentication.SampleLoginModule required debug=true; };
要设置的系统参数 -Djava.security.auth.login.config==src/authentication/sample_jaas.config
Demo认证执行流程:
LoginContext lc = new LoginContext("sample",new MyCallbackHandler());
构造LoginContext
lc.login();
执行认证。因为系统参数设置
-Djava.security.auth.login.config==src/authentication/sample_jaas.config
所以认证配置文件是sample_jaas.config。因为构造LoginContext的时候传入的第一个参数是"sample".
所以在sample_jaas.config中查找名为sample的配置段。及
sample { authentication.SampleLoginModule required debug=true; };
authentication.SampleLoginModule为指定的LoginModule实现。
因为构造LoginContext的时候传入的第二个参数是new MyCallbackHandler。所以MyCallbackHandler用于获取用户认证信息。
所以:在执行lc.login()时,会调用SampleLoginModule的login方法。而SampleLoginModule会通过MyCallbackHandler获取用户的认证信息。如果认证成功则返回true,否则返回false.
相关推荐
JAAS认证与授权教程,包含本教程的源代码
文件中包含 已配置好的tomcat7和jass示例 打包部署后即可运行 还有一份说明文档 tomcat配置的是mac版的,如果是windows的系统请自行修改tomcat启动参数
jaas 入门经典实例,jaas 入门经典实例,jaas 入门经典实例jaas 入门经典实例,jaas 入门经典实例
JAAS JaasDemo JAAS例子
JAAS in Web Applications主要是关于java 的认证与授权.例子很详细,如果有需要此类功能开发可以联系我,收费2000
JAAS(Java Authentication and Authentication Service Jay,认证和授权服务)是Java安全编程的一个重要补 充。它提供了根据验证主题身份来验证主题和授权资源访问的标准方法。本文较全面地介绍了JAAS的特点、组成 ...
Java安全框架最初集中在保护用户运行潜在的不可信任代码,是基于代码的来源(URL)和谁创建的代码(certificate)来给移动代码进行授权。...JAAS已经整合进了Java 2 SDK 1.4,作为标准的用户认证与授权模型。
jaas的详细资料 基于JAAS和J2EE Web容器的验证与授权
Java认证和授权服务(JAAS)供应器JAAs验证机制
学习jaas入门经典实例,学习jaas入门经典实例,学习jaas入门经典实例,学习jaas入门经典实例,学习jaas入门经典实例
JAAS Java认证和授权服务笔记代码
通过JAAS框架针对LDAP数据存储库对用户进行授权和认证的模块。 已经创建了两个测试类,可以用作创建新连接器的模板 安装 编译项目: mvn clean package 将生成的jar文件复制到项目类路径 在配置目录(CONF_DIR)中...
采用 JAAS可插拔认证框架技术,研究设计了适用于企业环境的身份认证平台.该平台以改进的动态口令身份认证模块为基础认证模块,并结合 JAAS的工作流程,具有较高的认证强度,安全性较好,同时也可以根据需要方便地选择认证...
关键词:Java WAS7.0 、独立定制注册表、SSO、JAAS、j_security_check、基于数据库认证单点登录。 关于Java单点登录虽然sun提供了SSO标准的JAAS实现方式,但是基于各应用服务器其配置方式不同而且完全不同,在使用...
利用JAAS安全模型,以WebLogic Server作为应用平台,构建了一个基于JAAS的校园网下的身份认证安全系统,解决了在开放的Internet网络环境下身份安全认证的不一致性问题,为校园网下的信息系统的用户身份确认以及授权...
针对目前 Java技术的广泛应用, 特别是很多基于 J2EE 平台的...份认证技术 JAAS(Java Authentication Authorization Service)。由于身份认证和授权与安全机制密切相关, 同时也对 Java的安 全及权限访问控制做了一些阐述
目录 Java安全性 ...1.关于本教程 2.Java安全性编程概念 3.确保消息的完整性 4.保持消息的机密性 5.用公钥保密消息 6.无纸签名 7.证实你的身份 ...3.JAAS中的认证 4.JAAS中的授权 5.JAAS示例 6.结束语和参考资料
Tomcat Basic Form 2认证实例! 含有配置文件,
该方案采用JAAS(Java Authentication Authorization Service)实现可插入式登录模块,采用X509数字证书作为用户身份认证,通过配置Web服务器,并利用服务器证书和客户端证书实现服务器与客户端之间的SSL双向认证;...