我需要在 ejb 方法中访问客户端主体(用户名)。我不想将它添加为参数。尝试将它们添加到 Context 对象中;
prop.add(Context.SECURITY_AUTHENTICATION,"user")
prop.add(Context.SECURITY_CREDENTIALS,"pass")
但尝试在方法内部访问它们; @资源 私有(private) SessionContext ctx;
public void someMethod() {
Principal principal = ctx.getCallerPrincipal();
//returns anonymous
仍然给我讨厌的用户。
在 weblogic 上工作,有什么建议吗?
谢谢
最佳答案
类似问题...我正在使用客户端证书和自定义 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 引用后者作为主体,因为它可以是不同的用户名/密码。
关于java - 在 ejb 方法中访问客户端主体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2363716/