访问控制实验报告.

上传人:suij****uang 文档编号:147361969 上传时间:2022-09-02 格式:DOCX 页数:9 大小:13.40KB
收藏 版权申诉 举报 下载
访问控制实验报告._第1页
第1页 / 共9页
访问控制实验报告._第2页
第2页 / 共9页
访问控制实验报告._第3页
第3页 / 共9页
资源描述:

《访问控制实验报告.》由会员分享,可在线阅读,更多相关《访问控制实验报告.(9页珍藏版)》请在装配图网上搜索。

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.sec

3、urity.auth.login.LoginContext LoginContext 旨 在提供一个开放的登录总接口,你只需要用从策略文件中取 得的策略名,以及下面介绍的回调对象创建得到一个 LoginContext,再调用一次login方法即可完成登录,登录模 块在这里是透明的。 javax.security.auth.spi.LoginModule 登录模块实现了 对用户的认证逻辑,它的作用是在登录配置文件中得到体 现,在后面的例子里我们会看到怎么编写一个登录配置文件 以及上面说过的策略文件。LoginModule接口包括五个主要的方法initialize方法, 初始化模块,保存当前Sub

4、ject以及一些参数。login方法,判断一次登录过程中是否认证通过。commit方法,是否提交登录结果 logout方法注销过 程,清除内部状态,并删除Subject中全部的Principal abort 方ty.PrivilegedAction上面说了那么多登录相关的接口,该说说 授权了,如果我们只谈写源代码,那么很简单,只要实现一 个PrivilegedAction接口,覆盖一个run方法,把你想要做的 事情统统放到这个run中就可以了。五、实验代码 / MyPrincipal.java package com.jungleford.auth; import java.security.

5、Principal; public class MyPrincipal implements Principal / 一个 Principal 的例子 private String name; / Principal 的名字 public MyPrincipalString name this.name name; public String getName /取得 Principal 的名字 return this.name; public boolean equalsObject principal / 判断两个 Pincipal 相同的 依据 if principal instanceo

6、f MyPrincipal return this.name.equalsMyPrincipalprincipal.getName; else return false; public String toString / Principal 的表示 return “MyPrincipal “ this.name; public int hashCode /确定本 对象的散列值 return this.name.hashCode; / MyLoginModule.java package com.jungleford.auth; import java.util.*; import java.i

7、o.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 CallbackHan

8、dler cbHandler; /回调对象,提供终端下获取用户名、口令的界 面private Map sharedState; /用于缓存中间结果的共享区 private Map options; /用于保存某些登录模块所需要用到的 一些配置选项 private boolean succeeded false; / 一次 login 成功的标志 private boolean cmtSucceeded false; / 整体登 录成功的提交标志 private String username; /取得用户名 private char password; / 取得口 令 private Prin

9、cipal 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; pu

10、blic 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“Passwo

11、rd “, 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

12、ioe 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, JOp

14、tionPane.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.getMessageTypecas

15、eTextOutputCallback.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.getMessa

16、geType; 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 pcPasswordCallbackcb

17、si;/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 Exceptio

19、n 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 mainStri

20、ng 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.

22、exitO; ) /login.conf JAASTest com.jungleford.auth.MyLoginModule required; ; /jaas.policy grant permission javax.security.auth.AuthPermission “createLoginContext;permissionjavax.security.auth.AuthPermission doAs; permission javax.security.auth.AuthPermissionmodifyPrincipals;permission javax.security.

23、auth.AuthPermission getSubject; ; grant principal com.jungleford.auth.MyPrincipal guest permission java.io.FilePermission myfile.txt,read; ;六、实验分析由于java对环境配置非常复杂,在安装过 openssl密码库,改变环境变量之后,这个代码编译无错但是 始终运行不出来,并且始终找不到原因。由于时间有限,没来的及把所有的内容实现。不过已经实现了简单的访问控制。由于实验的难度,代码部分借鉴了网络上的一些内容, 并结合了在之前操作系统课和java智能卡课中的内容,但是 在搜索资料的过程当中,让我了解了更多。七、实验心得 通过本次试验,对访问控制有了一定了解。但是由于对java语言的不熟悉和气复杂性,本次实验始 终运行不出来。但是在编译代码的过程中,对访问控制的个方面问题都 有了一定的认识。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!