45fan.com - 路饭网

搜索: 您的位置主页 > 网络频道 > 阅读资讯:Jetspeed2学习笔记知识点介绍

Jetspeed2学习笔记知识点介绍

2016-09-03 05:08:44 来源:www.45fan.com 【

Jetspeed2学习笔记知识点介绍

6、
一个Subject也许会与一个AccessControlContext联系在一起,可以通过如下方法返回一个与AccessControlContext联系在一起的subject
public static Subject getSubject(final AccessControlContext acc);
 
7、
一个特定的Subject通过doAs方法来执行一个特定的操作(Action),原文如下:
The following static methods may be called to perform an action as a
particular Subject:
 
public static Object
doAs(final Subject subject,
final java.security.PrivilegedAction action);
 
public static Object
doAs(final Subject subject,
final java.security.PrivilegedExceptionAction action)
throws java.security.PrivilegedActionException;
};
 
8、
一个演示第一个doAs方法的例子:
假设有个用户叫Bob,他已经通过了LoginContext(登陆)验证,随后,一个拥有com.ibm.security.Principal标识的subject产生了,这个Principal被命名为“Bob”。同时假设SecurityManager已经安装,并且访问策略文件(PolicyFile)存在,并定义如下:
 
 
// 授予 "BOB"访问(读)文件 "foo.txt"的许可
grant Principal com.ibm.security.Principal "BOB" {
permission java.io.FilePermission "foo.txt", "read";
};
以下是本应用的代码:
class ExampleAction implements java.security.PrivilegedAction {
public Object run() {
java.io.File f = new java.io.File("foo.txt");
// 以下代码将会触发一个安全检测(通过Policy)
if (f.exists()) {
System.out.println("File foo.txt exists");
}
return null;
}
}
public class Example1 {
public static void main(String[] args) {
// 验证并鉴别用户 "BOB",这个过程在LoginContext那章中有描述
Subject bob;
// 在验证阶段,将bob与此Subject相关联
// "BOB"的身份执行"ExampleAction"
Subject.doAs(bob, new ExampleAction());
}
}
 
在执行过程中,ExampleAction在调用 f.exists() 时将遭遇一个安全检测。由于执行ExampleAction的是BOB,而在策略(Policy)文件中,已经赋予了Bob有此操作的相关权限,ExampleAction将通过安全检测。如果策略被改变的话,一个SecurityException的错误将被抛出。
9、
Principals用于描述Subject的身份,其必须继承java.security.Principal java.io.Serializable 接口
 
10、
LoginContext提供了4中构造器,如下:
 
public LoginContext(String name) throws LoginException;
public LoginContext(String name, Subject subject) throws
LoginException;
public LoginContext(String name, CallbackHandler callbackHandler)
throws LoginException
public LoginContext(String name, Subject subject,
CallbackHandler callbackHandler) throws LoginException
 
它们都统一有个参数name,这个参数指定了验证所使用的LoginModul
 
Jaas配置文件如下:
WorkDesk {
net.joinwork.bpm.workdesk.LoginModule required;
};
 
// LoginContext 实例化一个新的Subject
LoginContext lc = new LoginContext("WorkDesk");
try {
// 验证这个Subject
lc.login();
System.out.println("验证成功!");
// 获得被验证成功的Subject
Subject subject = lc.getSubject();
...
// 办完事退出
lc.logout();
} catch (LoginException le) {
System.err.println("authentication unsuccessful: " +le.getMessage());
}
 
 
10、
要配置如下图所示的区域,可以编辑pages目录下的:“folder.metadata”文件,这个文件控制区域的内容
Jetspeed2学习笔记知识点介绍
11、
Portlet规范明确定义了Portlet应用如何使用“用户属性”,首先,必须在protlet.xml文件中定义属性如下:
<portlet-app version="1.0" xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd">
 <user-attribute>
 <description>User Given Name</description>
 <name>user.name.given</name>
 </user-attribute>
 <user-attribute>
 <description>User Last Name</description>
 <name>user.name.family</name>
 </user-attribute>
 <user-attribute>
 <description>User eMail</description>
 <name>user.home-info.online.email</name>
 </user-attribute>
 ...
</portlet-app>
一旦属性如上定义,当前的portlet就可以利用PortletRequest 中定义的USER_INFO常量来从登陆用户处以无法更改的Map数据格式来获得当前的值,代码如下:
Map userInfo = (Map)request.getAttribute(PortletRequest.USER_INFO);
String givenName = (userInfo!=null)? (String)userInfo.get("user.name.given") : "";
String lastName = (userInfo!=null) ? (String)userInfo.get("user.name.family") : "";
String email = (userInfo!=null) ? (String)userInfo.get("user.home-info.online.email") : "";
 

本文地址:http://www.45fan.com/a/question/71535.html
Tags: 学习 笔记 Jetspeed2
编辑:路饭网
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部