我需要在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,任何指针?
由于
答案 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引用后者作为主体,因为它可以是不同的用户名/密码。