程序抛出 AccessControlException: access denied... 异常

prog1123 2017-02-28 12:46:16
今天在试验《Java核心技术-卷2》第9章的认证用户访问权限的程序例子(Example 9-8~Example 9-11),在策略文件AuthTest.policy给用户"john"授与属性读取权限,可是在程序中,使用该封装了认证用户的Subject对象去执行PrivilegedAction操作时,仍然报 java.security.AccessControlException: access denied ("java.util.PropertyPermission" "user.home" "read"异常!
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// AuthTest.policy:
grant codebase "file:login.jar"
{
permission javax.security.auth.AuthPermission "createLoginContext.Login1";
permission javax.security.auth.AuthPermission "doAsPrivileged";
};

grant principal com.sun.security.auth.NTPrincipal "john"
{
permission java.util.PropertyPermission "user.*", "read";
};
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 主程序AuthTest.java:
public class AuthTest
{
public static void main(final String[] args)
{
try
{
System.setSecurityManager(new SecurityManager());
LoginContext context = new LoginContext("Login1");
context.login();
System.out.println("Authentication successful.");
Subject subject = context.getSubject();
System.out.println("subject=" + subject);
PrivilegedAction action = new SysPropAction("user.home");
Object result = Subject.doAsPrivileged(subject, action, null);
System.out.println(result);
context.logout();
}
catch (LoginException e)
{
e.printStackTrace();
}
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// SysPropAction.java:
public class SysPropAction implements PrivilegedAction
{
/**
Constructs an action for looking up a given property.
@param propertyName the property name (such as "user.home")
*/
public SysPropAction(String propertyName) { this.propertyName = propertyName; }

public Object run()
{
return System.getProperty(propertyName);
}

private String propertyName;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// jaas.config
Login1
{
com.sun.security.auth.module.NTLoginModule required;
};
...全文
203 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
prog1123 2017-02-28
  • 打赏
  • 举报
回复

51,409

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧