jass登录认证

标签: jass 登录 认证 | 发表时间:2014-12-12 09:47 | 作者:y806839048
出处:http://www.iteye.com
一 什么是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



Java代码 复制代码 收藏代码
package authentication; 
import java.io.BufferedReader; 
import java.io.IOException; 
4.import java.io.InputStreamReader; 
5.import javax.security.auth.callback.Callback; 
6.import javax.security.auth.callback.CallbackHandler; 
7.import javax.security.auth.callback.NameCallback; 
8.import javax.security.auth.callback.PasswordCallback; 
9.import javax.security.auth.callback.UnsupportedCallbackException; 
10. 
11.public class MyCallbackHandler implements CallbackHandler { 
12. 
13.    @Override 
14.    public void handle(Callback[] callbacks) throws IOException, 
15.            UnsupportedCallbackException { 
16.        for(Callback callback:callbacks){ 
17.             
18.            if(callback instanceof NameCallback){ 
19.                NameCallback nameCallback=(NameCallback)callback; 
20.                 
21.                String prompt=nameCallback.getPrompt(); 
22.                 
23.                System.err.print(prompt); 
24.                 
25.                nameCallback.setName(new BufferedReader(new InputStreamReader(System.in)).readLine()); 
26.            } 
27.             
28.            if(callback instanceof PasswordCallback){ 
29.                PasswordCallback passwordCallback=(PasswordCallback)callback; 
30.                 
31.                String prompt=passwordCallback.getPrompt(); 
32.                 
33.                System.err.print(prompt); 
34.                 
35.                passwordCallback.setPassword(new BufferedReader(new InputStreamReader(System.in)).readLine().toCharArray()); 
36.            } 
37.        } 
38. 
39.    } 
40.} 




SampleLoginModule.java



Java代码 复制代码 收藏代码
1.package authentication; 
2.import java.util.Map; 
3.import javax.security.auth.Subject; 
4.import javax.security.auth.callback.Callback; 
5.import javax.security.auth.callback.CallbackHandler; 
6.import javax.security.auth.callback.NameCallback; 
7.import javax.security.auth.callback.PasswordCallback; 
8.import javax.security.auth.login.LoginException; 
9.import javax.security.auth.spi.LoginModule; 
10.public class SampleLoginModule implements LoginModule { 
11. 
12.    // initial state 
13.    private Subject subject; 
14.    private CallbackHandler callbackHandler; 
15.    private Map sharedState; 
16.    private Map options; 
17. 
18.    // configurable option 
19.    private boolean debug = false; 
20. 
21.    // username and password 
22.    private String username; 
23.    private char[] password; 
24. 
25.    public void initialize(Subject subject, CallbackHandler callbackHandler, 
26.            Map sharedState, Map options) { 
27.  
28.    this.subject = subject; 
29.    this.callbackHandler = callbackHandler; 
30.    this.sharedState = sharedState; 
31.    this.options = options; 
32. 
33.    // initialize any configured options 
34.    debug = "true".equalsIgnoreCase((String)options.get("debug")); 
35.    } 
36. 
37.    public boolean login() throws LoginException { 
38.        Callback[] callbacks = new Callback[2]; 
39.        callbacks[0] = new NameCallback("user name: "); 
40.        callbacks[1] = new PasswordCallback("password: ", false); 
41.      
42.        try { 
43.            callbackHandler.handle(callbacks); 
44.        } catch (Exception e) { 
45.            throw new RuntimeException(e); 
46.        } 
47.        username = ((NameCallback)callbacks[0]).getName(); 
48.        password = ((PasswordCallback)callbacks[1]).getPassword(); 
49.        
50.        if("admin".equals(username)&&"admin".equals(new String(password))){ 
51.            return true; 
52.        } 
53.         
54.        return false; 
55. 
56.    } 
57. 
58.    public boolean commit() throws LoginException { 
59.        System.out.println(" =========== commit =========="); 
60.        return true; 
61.    } 
62. 
63.    
64.    public boolean abort() throws LoginException { 
65.        System.out.println(" =========== abort =========="); 
66.        return true; 
67.    } 
68. 
69. 
70.    @Override 
71.    public boolean logout() throws LoginException { 
72.        System.out.println(" =========== logout =========="); 
73.        return true; 
74.    } 
75. 
76.    
77.} 




SampleAcn.java



Java代码 复制代码 收藏代码
1.package authentication; 
2.import javax.security.auth.login.LoginContext; 
3.public class SampleAcn { 
4.    public static void main(String[] args) throws Exception { 
5.        LoginContext lc = new LoginContext("sample",new MyCallbackHandler()); 
6.         
7.        lc.login(); 
8.    } 
9.} 




sample_jaas.config



Config代码 复制代码 收藏代码
1.sample { 
2.   authentication.SampleLoginModule required debug=true; 
3.}; 




要设置的系统参数 -Djava.security.auth.login.config==src/authentication/sample_jaas.config



Demo认证执行流程:



Java代码 复制代码 收藏代码
1.LoginContext lc = new LoginContext("sample",new MyCallbackHandler()); 


构造LoginContext



Java代码 复制代码 收藏代码
1.lc.login(); 


执行认证。因为系统参数设置

-Djava.security.auth.login.config==src/authentication/sample_jaas.config

所以认证配置文件是sample_jaas.config。因为构造LoginContext的时候传入的第一个参数是"sample".

所以在sample_jaas.config中查找名为sample的配置段。及



Config代码 复制代码 收藏代码
1.sample { 
2.   authentication.SampleLoginModule required debug=true; 
3.}; 


authentication.SampleLoginModule为指定的LoginModule实现。

因为构造LoginContext的时候传入的第二个参数是new MyCallbackHandler。所以MyCallbackHandler用于获取用户认证信息。

所以:在执行lc.login()时,会调用SampleLoginModule的login方法。而SampleLoginModule会通过MyCallbackHandler获取用户的认证信息。如果认证成功则返回true,否则返回false.


已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [jass 登录 认证] 推荐:

jass登录认证

- - 行业应用 - ITeye博客
Java 认证和授权服务”(Java Authentication and Authorization Service,JAAS)是对 Java 2 SDK 的扩展. JAAS 可分Authentication和Authorization. 1)  Authentication:认证用户身份. 通俗的来说就是哪个用户在执行操作.

webservice认证

- - 行业应用 - ITeye博客
1、服务器端,增加拦截认证--ServerPasswordCallback.java.                 throw new WSSecurityException("用户不匹配.                 throw new WSSecurityException("密码不匹配.

oauth 认证心得

- 非狐外传 - python.cn(jobs, news)
OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准. 简易来说,就是我们可以在某一个第三方服务器,如:新浪,豆瓣,在用户授权,并且不透漏密码等信息给我们的条件下,访问和修改用户的资源. oauth的项目主页为:http://oauth.net/ ,现在国内很多网站的开放平台都采用了Oauth方式来进行授权.

从登录开始

- - 博客园_知识库
  那就先来看看为什么而做.   就数据而言,网站的流量仍是大量的匿名用户带来的. 我们无法根据请求的任何方面(ip地址,用户代理等)准确识别来自同一人的连续请求.   不能识别,自然无法对其分类进而转化挖掘,获取网站所需的价值.   互联网服务于人,要开发一个真正令人动心的网站,我们必须触达到浏览器后面那些活生生的人.

Google+ 支持加 V 认证

- Nanqi - 36氪
在 Google+ 上看到一个叫 +truant 的人不确定是不是我. Google+ 团队的 Wen-Ai Yu 宣布 Google+ 推出了认证帐户(相当于新浪微博的加V),在用户的个人档案页面,会有一个蓝色的对勾,提示你这是一个 verified name (认证帐户). 鼠标悬停放上去会显示这个人的认证信息.

ssh密钥认证原理

- - 寒江孤影
SSH之所以能够保证安全,原因在于它采用了公钥加密. 整个ssh密码登录过程是这样的:. 1)用户向远程主机发登录请求:ssh user@远程主机. 2)远程主机收到用户的登录请求,把自己的公钥发给用户. 2)用户使用这个公钥,将登录密码加密后,发送回远程主机. 3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录.

登录密码与HTTP Request

- - 博客园_首页
我们知道,在一些主流的浏览器中按F12,就会拉出一个查看web访问详细信息的窗口,在firefox中叫firebug,在chrome或者IE中,则叫developer tools,他们功能都大同小异,当然,比较重要的自然是查看http request与response, 幸运的是,这三个工具都把其放在一个叫Network的tab下面,虽然显示格式略有不同,但基本信息都是一样的.

cas配置单点登录

- - 开源软件 - ITeye博客
        最近一段时间研究的cas,不知道是什么原因,可能自己最近太浮躁了,没有沉下心来去研究,所以一直拖着,将近拖了一周半的时间,上周的周总结,确保一定要解决的问题,今天还是横下心来,处理完这个问题,我是一个对于技术痴迷的人,对于现在研究出来这个结果非常高兴,与大家分享一下:.        注明:本文所讲的至少怎么配置,但是具体的原理和细节会在稍后的时间里更新给大家,如有不对的地方希望大家指出来,共同学习和探讨一下.

SSH的登录限制

- - 操作系统 - ITeye博客
从网络来的数据包首先要经过iptables,所以可以在iptables上面加上规则来限制ip的访问. 比如只限制3个外网,1个内网IP连接. 直接在/etc/hosts.deny里面加一行. sshd: ALL EXCEPT xxx.xxx.xxx.xxx(允许的ip或网段). sshd: ALL EXCEPT xxx.xxx.xxx.xxx/255.255.255.0(允许的网段) 就可以了.

android 单点登录功能

- - CSDN博客移动开发推荐文章
很多伙伴在开发自己公司产品的时候,一般都会考虑用户账号安全 ,或者用户账号功能使用限制等问题. 这时候我们就会考虑到单点登录这个功能. 一般情况下我们在开发单点登录功能的时候,其实有很多种做法,这个根据自己的具体需求选择就可以,其实我一直认为很多东西没有绝对的规则,我们其实需要做的是尽量全面的尽可能多的去掌握更多的知识技术,当我们用到的时候可以从中选择出最适合自己的产品的技术,从开发时间,应用性等.