`
y806839048
  • 浏览: 1134038 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

jass登录认证

阅读更多
一 什么是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.
分享到:
评论

相关推荐

    JASS及函数库

    【JASS及函数库】是一种专门为了帮助不熟悉JASS语言的改图者理解JASS脚本而设计的工具。JASS(Jass Advanced Scripting System)是Warcraft III地图编辑器中的一种高级脚本语言,它允许用户自定义游戏规则、事件处理...

    JAAS认证(mac版tomcat)

    **Java Authentication and Authorization Service (JAAS) 认证在Mac版Tomcat中的应用** Java Authentication and Authorization Service (JAAS) 是Java平台的核心组件,用于提供安全的用户认证和权限管理。在Mac版...

    JASS教程 魔兽脚本编程语言

    **JASS教程:魔兽脚本编程语言** JASS(Just Another Scripting System)是一种专为暴雪娱乐的《魔兽争霸III》(Warcraft III)设计的脚本语言,用于创建自定义游戏地图、触发器和游戏逻辑。它以其强大而灵活的特性...

    魔兽3的Jass语言参考手册

    《魔兽3的Jass语言参考手册》是一本深入解析Jass语言的专业指南,专为魔兽争霸3(Warcraft III)地图编辑者和脚本开发者设计。Jass是暴雪娱乐为魔兽争霸3自定义地图开发所创建的一种强大而灵活的脚本语言。它允许...

    Jass完全手册完全下载

    这是JASS完全手册 提供下载 学习JASS者下载

    JASS速查手册

    JASS速查手册,方便作图或学习的时候查询,里面有中文详细分类。

    Jass编辑工具 JassCraft JassShopPro JASS助手

    在魔兽争霸III(Warcraft III)的自定义地图制作领域,JASS(Just Another Scripting System)是一种强大的脚本语言,用于编写游戏逻辑和事件处理。为了帮助开发者更高效地编写和管理JASS代码,出现了多种JASS编辑...

    魔兽 JASS API

    魔兽JASS API是一种专为《魔兽争霸III》地图编辑器设计的编程语言,它允许地图制作者通过编写脚本来扩展游戏的功能,实现复杂的逻辑和自定义游戏规则。JASS(Just Another Scripting System)是暴雪娱乐为了方便非...

    jass编辑器YDWE版

    《Jass编辑器YDWE版:开启你的地图脚本编辑新纪元》 在魔兽争霸III的地图编辑领域,Jass语言是不可或缺的一部分,而YDWE(Yet Another W3E Editor)则是一款广受欢迎的Jass编辑工具。现在,我们有了一个全新的版本...

    jass助手帮助

    《Jass助手全面指南——新手入门与进阶攻略》 Jass助手,作为一个专为魔兽争霸III地图编辑者设计的工具,旨在简化JASS(Just Another Scripting System)语言的学习和应用过程,让新手也能轻松上手。本文将详细介绍...

    魔兽jass翻译

    本软件只为不懂JASS的改图者方便阅读JASS而制作。更新魔兽war3map.w3r(区域),war3map.w3c(镜头),war3mapUnit.doo(单位置放),war3map.imp(导入列表)文件的还原

    很好的jass培训班教程

    《很好的JASS培训班教程》是一份专为魔兽地图编辑器用户设计的进阶教程,它汇集了多位JASS编程高手的经验与智慧,旨在帮助玩家深入理解和掌握JASS语言,从而提升自定义地图的制作水平。JASS(Just Another Scripting...

    jass培训教程

    **JASS培训教程** JASS(Just Another Scripting System)是一种专为暴雪娱乐的《魔兽争霸III》地图编辑器设计的脚本语言。它允许玩家和地图制作者通过编写代码来实现游戏中的各种复杂逻辑,如单位行为、触发器、...

    jass变量类型排泄

    jass变量类型排泄的简单参考,但要提醒,别为了排泄而排泄,反正泄露一下又不会怀孕

    魔兽争霸 WAR3 JASS技能ID进制转换器

    《魔兽争霸WAR3 JASS技能ID进制转换器详解及应用》 在魔兽争霸III(WAR3)的游戏世界中,地图编辑器与JASS(Just Another Scripting System)语言为玩家提供了无限的创意空间,让游戏爱好者能够自定义游戏规则、...

    JASS使用教材

    ### JASS使用教材详解 #### 引言 JASS(Java Script for Warcraft III)是《魔兽争霸III》中的一种脚本语言,用于游戏地图编辑器(World Editor)中编写自定义游戏逻辑。JASS的强大之处在于它允许用户创建复杂的...

    魔兽jass工具

    魔兽Jass工具是一款专为魔兽争霸III地图编辑者设计的强大辅助软件,它涵盖了多个关键功能,帮助用户在创建和修改地图时实现高效操作。这款工具的主要特点包括: 1. **Jass脚本修改**:Jass是魔兽争霸III的地图脚本...

    jass api详解

    ### JASS API 详解 JASS (Java Alike Scripting System) 是《魔兽争霸 III》游戏内的一种脚本语言系统,用于实现自定义地图的各种功能和逻辑。下面将基于提供的部分JASS API 函数进行详细解析。 #### 基础概念 在...

    魔兽rpg编程 脚本 j文件编辑 Jass shop

    功能最强大的Jass编辑器更新 1.4.3.3 -> 1.4.3.4[!] 修正了当字符串或注释中存在括号时括号提示的显示错误问题;[!] plugin(插件)菜单不再可以使用任意热键;[!] 修正了Shortcut Manager的程序运行期间内存泄露...

Global site tag (gtag.js) - Google Analytics