小编kik*_*iki的帖子

禁止调用System.exit

我试图禁止System.exit(int);在一些罐子里打电话.

这些罐子将由外部团队开发,并由我们的"容器"应用程序加载.

我的第一反应是使用java安全管理器:

-Djava.security.manager-Djava.security.debug=all
Run Code Online (Sandbox Code Playgroud)

用最简单的${user.home}/.java.policy文件:

grant {};
Run Code Online (Sandbox Code Playgroud)

虽然我不能再调用System.getProperties()(因为我没有java.util.PropertyPermission),我可以做一个System.exit(0)!!

该选项java.security.debug=all提供以下控制台:

scl: getPerms ProtectionDomain (file: my-bin-path <no sign certificates>)
sun.misc.Launcher $ AppClassLoader @ 10385c1
<no principals>
java.security.Permissions @ 15b7986 (
(java.lang.RuntimePermission exitVM)
(java.io.FilePermission \my-bin-path\- read)
)
Run Code Online (Sandbox Code Playgroud)

为什么my-bin-path中的所有类都已java.lang.RuntimePermission exitVM授予?????

谢谢

java securitymanager

11
推荐指数
1
解决办法
2377
查看次数

JAAS额外的LoginModules

我想知道如何结合这两个身份验证步骤:

  1. 检查LDAP中的用户/密码
  2. 将DB中找到的主体(角色)添加到主题中.

LDAP用户存储库不知道特定于应用程序的角色,我不想管理应用程序DB中的密码.所以我需要两者.

JAAS配置文件允许有其他LoginModule:

<name used by application to refer to this entry> { 
    <LoginModule> <flag> <LoginModule options>;
    <optional additional LoginModules, flags and options>;
};
Run Code Online (Sandbox Code Playgroud)

但我找不到解释我如何工作的例子.

这是好方法吗?

谢谢

=========================================

这是我的答案:

实际上我们可以有额外的LoginModule.JAAS配置文件是:

Sample {
  com.sun.security.auth.module.LdapLoginModule Requisite
  userProvider="ldap://acme.org:389/OU=Users,OU=_ACME,DC=acmegis,DC=acme,DC=org"
  authIdentity="{USERNAME}"
  userFilter="(userPrincipalName={USERNAME})"
  storePass=true

  sample.module.SampleLoginModule required debug=true;
};
Run Code Online (Sandbox Code Playgroud)

这里我们有两个LoginModule:

Sun的LdapLoginModule检查用户/密码,并查询查询我的db并填充主体的sample.module.SampleLoginModule.storePass = true的重要参数要求LdapLoginModule将用户名和密码存储在模块的共享状态中.(参见http://docs.oracle.com/javase/6/docs/jre/api/security/jaas/spec/com/sun/security/auth/module/LdapLoginModule.html).

因此,下一个LoginModules可以获取传递给sharedState Map参数中的initialize方法的用户名.他们应该在login()中无关,而在DB中用于填充Principales的查询是在commit()中完成的(就像Shimi Bandiel所说).

我还没有使用它,但有一个由JBoss开发的DatabaseServerLoginModule(参见http://community.jboss.org/wiki/DatabaseServerLoginModule),它支持身份验证和角色映射.与password-stacking = useFirstPass一起使用,我们应该得到我的需要的答案,而无需编写任何行代码(但是一个漂亮的JAAS配置文件).

BR

java login ldap jaas

7
推荐指数
1
解决办法
3377
查看次数

标签 统计

java ×2

jaas ×1

ldap ×1

login ×1

securitymanager ×1