版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、访问控制实验报告访问控制实验报告 刘唯墨08283013一、实验介绍谈到访问控制,或者说“授权”,这里有两 层含义,一是从资源的角度,这个socket端口是否被允许操 作二是从访问者的角度,我想通过80端口看Web上的新闻, 在这个系统中有没有这个资格我想播放D盘上的视频文件, 我得到了访问这个文件的权限了吗我有运行播放器的权限 吗所以就要提及访问权限。二、实验目的实现访问控制,并理解其内容和作用。三、实验内容1、选择一个软件系统,在其基础代码上 实施自主访问控制。2、明确自主访问控制的对象。3、实现自主访问控制授权管理的8个基本操作。包括授权,取消授权等,须支持级联授权撤销,授权继 承,否定
2、授权等。4、实现自主访问控制实施模块。四、实验步骤 javax.security.auth.Subject Subject 表征系 统中一个认证的用户,这个词时而被译为“主题”时而被以为 “主体”对系统的访问就体现为Subject.doAs或Subject.doAsPrivileged 方法。-java.security.Principal Principal 代表用户的一种身份对 象,一个用户的身份可能不只一个,他所在的组或所担任的 角色也是一种身份。通过一次登录后,可能向Subject插入一个或多个 Principal,这时候Subject才有实际意义,而不是一个空壳。javax.secu
3、rity.auth.login.LoginContext LoginContext 旨 在提供一个开放的登录总接口,你只需要用从策略文件中取 得的策略名,以及下面介绍的回调对象创建得到一个 LoginContext,再调用一次login方法即可完成登录,登录模 块在这里是透明的。javax.security.auth.spi.LoginModule 登录模块实现了 对用户的认证逻辑,它的作用是在登录配置文件中得到体 现,在后面的例子里我们会看到怎么编写一个登录配置文件 以及上面说过的策略文件。LoginModule接口包括五个主要的方法initialize方法, 初始化模块,保存当前Subje
4、ct以及一些参数。login方法,判断一次登录过程中是否认证通过。commit方法,是否提交登录结果 logout方法注销过 程,清除内部状态,并删除Subject中全部的Principal abort 方ty.PrivilegedAction上面说了那么多登录相关的接口,该说说 授权了,如果我们只谈写源代码,那么很简单,只要实现一 个PrivilegedAction接口,覆盖一个run方法,把你想要做的 事情统统放到这个run中就可以了。五、实验代码 / MyPrincipal.java package com.jungleford.auth; import java.security.Pr
5、incipal; public class MyPrincipal implements Principal / 一个 Principal 的例子 private String name; / Principal 的名字 public MyPrincipalString name name; public String getName /取得 Principal 的名字 return ; public boolean equalsObject principal / 判断两个 Pincipal 相同的 依据 if principal instanceof
6、MyPrincipal return .equalsMyPrincipalprincipal.getName; else return false; public String toString / Principal 的表示 return “MyPrincipal “ ; public int hashCode /确定本 对象的散列值 return .hashCode; / MyLoginModule.java package com.jungleford.auth; import java.util.*; import java.io.
7、IOException; import java.security.Principal; import javax.security.auth.*; import javax.security.auth.callback.*; import javax.security.auth.login.*;import javax.security.auth.spi.*; public class MyLoginModuleimplements LoginModule / 一个登录模块的例子 private Subject subject; / 登录主体的表征 private CallbackHandl
8、er cbHandler; /回调对象,提供终端下获取用户名、口令的界 面private Map sharedState; /用于缓存中间结果的共享区 private Map options; /用于保存某些登录模块所需要用到的 一些配置选项 private boolean succeeded false; / 一次 login 成功的标志 private boolean cmtSucceeded false; / 整体登 录成功的提交标志 private String username; /取得用户名 private char password; / 取得口 令 private Princi
9、pal principal; /取得登录后的身份标志 public void initializeSubject subject, CallbackHandler cbHandler, Map sharedState, Map options / 初始化过程System.out.println“Login module initializing .“; System.out.println; this.subject subject; this.cbHandler cbHandler; this.sharedStatesharedState; this.optionsoptions; publ
10、ic boolean login throws LoginException / 一 次登录过程if cbHandler null /尚未配置回调对象throw new LoginException“Error No CallbackHandler available “ “to garner authentication information from the user“; Callback cbs new Callback2; / 仅使用用户名回调和口 令回调 cbs0 new NameCallback“Login “; cbs1 newPasswordCallback“Password
11、 “, false; try cbHandler.handlecbs;username NameCallbackcbs0.getName; char tempPasswordCallbackcbs1.getPassword; if temp null / 口令为空 temp new char0; password new chartemp.length; System.arraycopytemp, 0, password, 0, temp.length; PasswordCallbackcbs1.clearPassword; / 清除内存中的口令 痕迹 catch IOException io
12、e throw new LoginExceptionioe.toString;catchUnsupportedCallbackException uce throw new LoginException“Error “ uce.getCallback.toString “ not available to garner authentication information “ “from the user“; boolean usrCorrect false; / 用户名正确否 boolean pwdCorrect false; / 口令正确否 if username.equalsuser“
13、/ 目前仅允许用户名为user的登录usrCorrect true; if usrCorrect System.out.println; pwdCorrect true; succeeded true; return true; / 一次登录成功 else System.out.println“MyLoginModule Authentication failed“; System.out.println; succeeded false; username null; for int i 0; i Available name “ “user, “Enter your name, JOpti
14、onPane.QUESTION_MESSAGE; String password JOptionPane.showInputDialognull, “Available password “letmepass, “Enter your password,JOptionPane.QUESTION_MESSAGE; for int i 0; i cbs.length; i if cbsi instanceof TextOutputCallback TextOutputCallback toc TextOutputCallbackcbsi; switchtoc.getMessageTypecaseT
15、extOutputCallback.INFORMATIONSystem.out.printlntoc.getMessage;break;caseTextOutputCallback.ERRORSystem.out.println“Error“ toc.getMessage; break; case TextOutputCallback.WARNING System.out.println“Warning “ toc.getMessage; break; default throw new IOException“Unsupported message type “ toc.getMessage
16、Type; else if cbsi instanceof NameCallback / prompt the user for a username NameCallback ncNameCallbackcbsi;/System.err.printnc.getPrompt;/System.err.flush;nc.setNameusername; else if cbsi instanceof PasswordCallback / prompt the user for sensitive information PasswordCallback pcPasswordCallbackcbsi
17、;/System.err.printpc.getPrompt;/System.err.flush;pc.setPasswordpassword.toCharArray; else throw new UnsupportedCallbackExceptioncbsi,“UnrecognizedCallback; /MyAction.java package com.jungleford.auth; import java.io.*; import java.security.*; public class MyAction implements PrivilegedAction /对资源的授权访
18、问动作public Object run / run 方法是必须 overriding 的 / 这里我 们假设访问动作是读取当前目录下 myfile.txt文件的内容 File file new File“myfile.txt“; String content “; try BufferedReader reader new BufferedReader new FileReaderfile; String line reader.readLine; while line null content line “n“; line reader.readLine; catch Exception
19、e System.err.println“Error Reading file failed; System.err.println; e.printStackTrace; return content; /JAASTest.java package com.jungleford.auth; import javax.security.auth.Subject;importjavax.security.auth.login.LoginContext; public class JAASTest /测试我们JAAS登录和授权的shell public static void mainString
20、 args LoginContext lc null; try / 仓0建 context,使用自定义的回调对象,策略名为JAASTest /简 单起见,仅使用一个 MyLoginModule模块lc new LoginContext“JAASTest“,new MyCallbackHandler; catch Exception e System.err.println“Error Creating login context failed; System.err.println; e.printStackTrace; System.exit-1; try / 整体登录 lc.login;
21、catch Exception e System.err.println“Error Login failed; System.err.println; e.printStackTrace; System.exit-1; / 获得授权访问 Object object Subject.doAslc.getSubject, new MyAction;System.out.println“Access successfully Reading file;System.out.println“;System.out.printlnobject;System.out.println; System.exitO; ) /login.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- +初+中数学+解直角三角形++课件++湘教版数学九年级上册+
- 《2024年 长期不同刈割制度下典型草原土壤团聚体稳定性和有机碳的分布特征》范文
- 2017年4月自考03297企业文化试题及答案含解析
- 超星尔雅学习通《形势与政策(2024春)》章节测试(综合卷)
- 《2024年 简析歌舞片《芝加哥》的声音艺术创作》范文
- 《2024年 燕山北部山地维管植物区系研究》范文
- 2024外贸销售合同范文英文销售合同范本
- 2024油漆涂料购销合同 书
- 2024车辆驾驶员聘用合同
- 2024钢筋班组项目承包合同
- GB 16715.2-2010瓜菜作物种子第2部分:白菜类
- 言行龟鉴的文言文翻译
- 集合的基本运算 教学设计-2022-2023学年高一上学期数学人教B版(2019)必修第一册
- 【农业种植技术】槟榔栽培技术
- 北京银河SOHO建筑景观照明案例分析课件
- 院长业务查房制度(4篇)
- 2022年版历史课标模拟试题
- 质量管理工具在护理-管理中的应用课件
- 数字能量学教程
- 蔚凯尔国际线上托育师培训测试卷附答案一
- 广西壮族自治区司法鉴定收费项目和收费标准(试行)
评论
0/150
提交评论