在ejb方法中访问客户端主体

时间:2010-03-02 14:21:27

标签: java security ejb-3.0

我需要在ejb方法中访问客户端主体(用户名)。我不想将它添加为参数。尝试将它们添加到Context对象中,如;

prop.add(Context.SECURITY_AUTHENTICATION,"user")
prop.add(Context.SECURITY_CREDENTIALS,"pass")

但是尝试在方法中访问它们;     @Resource     private SessionContext ctx;

public void someMethod() {
    Principal principal = ctx.getCallerPrincipal();
    //returns anonymous

仍然给我这个烦人的用户。

使用weblogic,任何指针?

由于

1 个答案:

答案 0 :(得分:1)

类似的问题......我正在使用客户端证书和自定义UserNameMapper进行测试。我的UserNameMapper返回“steve”,但EJB中的主体返回"<anonymous>",直到我通过控制台添加了“steve”用户。

Environment env = new Environment();
env.setInitialContextFactory(Environment.DEFAULT_INITIAL_CONTEXT_FACTORY);
//  env.setSecurityPrincipal("user");
//  env.setSecurityCredentials("pass");
env.setProviderUrl("t3s://localhost:7002");

InputStream key = new PEMInputStream(new FileInputStream(CERT_KEYFILE));
InputStream cert = new PEMInputStream(new FileInputStream(CERT_CERTFILE));
env.setSSLClientCertificate(new InputStream[] {key, cert});
env.setSSLClientKeyPassword(CERT_KEYPASSWORD);

将JAAS客户端与UsernamePasswordLoginModule一起使用时会出现同样的问题。通过在PrivilegedAction内的InitialContext查找中设置用户名/密码来修复。 EJB引用后者作为主体,因为它可以是不同的用户名/密码。