jass登录认证

标签: jass 登录 认证 | 发表时间:2014-12-12 17: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 API 认证授权术

- - 酷 壳 – CoolShell
我们知道,HTTP是无状态的,所以,当我们需要获得用户是否在登录的状态时,我们需要检查用户的登录状态,一般来说,用户的登录成功后,服务器会发一个登录凭证(又被叫作Token),就像你去访问某个公司,在前台被认证过合法后,这个公司的前台会给你的一个访客卡一样,之后,你在这个公司内去到哪都用这个访客卡来开门,而不再校验你是哪一个人.

WiFi 四次握手认证

- - IT瘾-dev
本文作者:98(信安之路作者团队成员). 如今大家都非常熟悉 WiFi 密码常见的破解手法,可是破解的原理你懂吗. 我想很多人都是不知道的,所以今天就来简单的讲解一下. WiFi 的四次握手是干什么的. 这是 WiFi 身份认证的一个过程,如果没有你的设备没有通过他的身份验证就不能加入他的局域网当中.

登录密码与HTTP Request

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

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(允许的网段) 就可以了.