访问控制实验报告.doc
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
访问控制实验报告
访问控制实验报告刘唯墨08283013
一、实验介绍谈到访问控制,或者说“授权”,这里有两层含义,一是从资源的角度,这个socket端口是否被允许操作二是从访问者的角度,我想通过80端口看Web上的新闻,在这个系统中有没有这个资格我想播放D盘上的视频文件,我得到了访问这个文件的权限了吗我有运行播放器的权限吗所以就要提及访问权限。
二、实验目的实现访问控制,并理解其内容和作用。
三、实验内容1、选择一个软件系统,在其基础代码上实施自主访问控制。
2、明确自主访问控制的对象。
3、实现自主访问控制授权管理的8个基本操作。
包括授权,取消授权等,须支持级联授权撤销,授权继承,否定授权等。
4、实现自主访问控制实施模块。
四、实验步骤· javax.security.auth.Subject Subject表征系统中一个认证的用户,这个词时而被译为“主题”时而被以为“主体”对系统的访问就体现为Subject.doAs或
Subject.doAsPrivileged方法。
·java.security.Principal Principal代表用户的一种身份对象,一个用户的身份可能不只一个,他所在的组或所担任的角色也是一种身份。
通过一次登录后,可能向Subject插入一个或多个Principal,这时候Subject才有实际意义,而不是一个空壳。
·javax.security.auth.login.LoginContext LoginContext旨在提供一个开放的登录总接口,你只需要用从策略文件中取得的策略名,以及下面介绍的回调对象创建得到一个LoginContext,再调用一次login方法即可完成登录,登录模块在这里是透明的。
·javax.security.auth.spi.LoginModule 登录模块实现了对用户的认证逻辑,它的作用是在登录配置文件中得到体现,在后面的例子里我们会看到怎么编写一个登录配置文件以及上面说过的策略文件。
LoginModule接口包括五个主要的方法initialize方法,初始化模块,保存当前Subject以及一些参数。
login方法,判断一次登录过程中是否认证通过。
commit方法,是否提交登录结果logout方法注销过程,清除内部状态,并删除Subject中全部的Principal abort 方
法· javax.security.auth.callback.CallbackHandler · java.securi
ty.PrivilegedAction 上面说了那么多登录相关的接口,该说说授权了,如果我们只谈写源代码,那么很简单,只要实现一个PrivilegedAction接口,覆盖一个run方法,把你想要做的事情统统放到这个run中就可以了。
五、实验代码// MyPrincipal.java package com.jungleford.auth; import java.security.Principal; 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 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.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 MyLoginModule
implements LoginModule { // 一个登录模块的例子private Subject subject; // 登录主体的表征private CallbackHandler cbHandler; // 回调对象,提供终端下获取用户名、口令的界面private Map sharedState; // 用于缓存中间结果的共享区private Map options; // 用于保存某些登录模块所需要用到的一些配置选项private boolean succeeded false; // 一次login 成功的标志private boolean cmtSucceeded false; // 整体登录成功的提交标志private String username; // 取得用户名private char[] password; // 取得口令private Principal 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.sharedState sharedState; this.options options; } public boolean login throws LoginException { // 一次登录过程if cbHandler null // 尚未配置回调对象throw new LoginException“Error No CallbackHandler available “ “to garner authentication information from the user“; Callback[] cbs new Callback[2]; // 仅使用用户名回调和口令回调cbs[0] new NameCallback“Login “; cbs[1] new PasswordCallback“Password “, false; try { cbHandler.handlecbs;