Jetspeed2学习笔记(二)(转载)
来源:互联网 发布:aix测试端口 编辑:程序博客网 时间:2024/04/28 06:03
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 voidmain(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”文件,这个文件控制区域的内容
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") : "";
- Jetspeed2学习笔记(二)(转载)
- Jetspeed2学习笔记(二)(转载)
- Jetspeed2学习笔记(二)
- Jetspeed2学习笔记(二)
- Jetspeed2学习笔记(一)(转载)
- Jetspeed2学习笔记(三)(转载)
- Jetspeed2学习笔记(一)(转载)
- Jetspeed2学习笔记(三)(转载)
- Jetspeed2学习笔记(四)(转载)
- Jetspeed2学习笔记(五)(转载)
- Jetspeed2学习笔记(六)(转载)
- Jetspeed2学习笔记(四)---JetSpeed2系统管理
- Jetspeed2学习笔记(一)
- Jetspeed2学习笔记(三)
- Jetspeed2学习笔记(五)
- Jetspeed2学习笔记(六)
- Jetspeed2学习笔记(六)
- Jetspeed2学习笔记(五)
- java中的多线程
- Python学习--数据结构
- ARM相关资料
- init.omap4pandaboard.rc & kernel support android system
- mfc常用方法关于窗体
- Jetspeed2学习笔记(二)(转载)
- Jetspeed2学习笔记(三)(转载)
- 信号与系统的三种变换
- 可怕的$_SERVER
- Activity与Service通信之BroadcastReceive
- 职场智慧之程序员的职业规划
- 将一个数组转换成深度最低的二叉树
- DBA工具——DMV——如何知道TSQL语句已运行了多久
- Tomcat下JSP、Servlet和JavaBean环境的配置