Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在ejb方法内访问客户机主体_Java_Security_Ejb 3.0 - Fatal编程技术网

Java 在ejb方法内访问客户机主体

Java 在ejb方法内访问客户机主体,java,security,ejb-3.0,Java,Security,Ejb 3.0,我需要在ejb方法中访问客户机主体(用户名)。我不想将其添加为参数。尝试将它们添加到上下文对象中,如 prop.add(Context.SECURITY_AUTHENTICATION,"user") prop.add(Context.SECURITY_CREDENTIALS,"pass") 但是试图在方法内部访问它们,就像; @资源 私人会话上下文ctx public void someMethod() { Principal principal = ctx.getCallerPrin

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

prop.add(Context.SECURITY_AUTHENTICATION,"user")
prop.add(Context.SECURITY_CREDENTIALS,"pass")
但是试图在方法内部访问它们,就像; @资源 私人会话上下文ctx

public void someMethod() {
    Principal principal = ctx.getCallerPrincipal();
    //returns anonymous
还是给我惹毛的用户

在weblogic上工作,有什么提示吗


谢谢类似的问题…我正在使用客户端证书和自定义用户名映射器进行测试。我的UserNameMapper返回“steve”,但是EJB中的主体返回了
,直到我通过控制台添加了一个“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将后者作为主体引用,因为它可以是不同的用户名/密码。

Steve您能解释一下这一行吗,我非常感谢您通过在PrivilegedAction的InitialContext查找中设置用户名/密码来修复此问题。参见示例17-3。有一个有趣的要点是,不要提供用户凭据。已经有一段时间了,但是当我测试时,如果不在InitialContext中显式地提供它们,我就无法访问EJB中的主体。因此,您可以在示例17-3中添加类似于我在上面注释的行的内容。Htthanks,我明白了,这是WebLogic特定的代码,实际上我试图从独立应用程序(Eclipse中的)访问Glassfish上运行的EJB。我已经设法对客户端进行了身份验证,但该信息不会传播到EJB。它仍然是匿名的。无论如何,非常感谢你。