【问题标题】:standalone rcp application, access secured EJBs, glassfish独立的 rcp 应用程序,访问安全的 EJB,glassfish
【发布时间】:2012-02-23 21:20:44
【问题描述】:

我想安全地访问 EJB。 我正在开发一个eclipse rcp 应用程序,我想连接到一个有一些EJBs 安全的glassfish 3.1.1 服务器,我想使用Java EE 6 security 连接到那个EJBs

我发现了这样的东西:

ProgrammaticLogin pm = new ProgrammaticLogin();
pm.login(usernameText.getText(), passwordText.getText());

Properties props = new Properties();
props.setProperty("java.naming.factory.initial", "com.sun.enterprise.naming.SerialInitContextFactory");
props.setProperty("java.naming.factory.url.pkgs", "com.sun.enterprise.naming");
props.setProperty("java.naming.factory.state", "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");
// optional. Defaults to localhost. Only needed if web server is running on a different host than the appserver
props.setProperty("org.omg.CORBA.ORBInitialHost", "localhost");
// optional. Defaults to 3700. Only needed if target orb port is not 3700.
props.setProperty("org.omg.CORBA.ORBInitialPort", "3700");

try
{
    Context ctx = new InitialContext(props);
}
catch (NamingException e)
{
    e.printStackTrace();
}

我包含了所有来自 glassfish appclient.jar glassfish3/glassfish/bin/package-appclient的jars

错误示例:

SEVERE: SEC9050: Programmatic login failed
com.sun.enterprise.security.auth.login.common.LoginException:  javax.security.auth.login.LoginException: No LoginModules configured for default
at com.sun.enterprise.security.auth.login.LoginContextDriver$9.run(LoginContextDriver.java:889)
...

您知道如何使用桌面应用程序的任何方法安全地登录EJBs 吗?

我的参考资料:

  1. Java EE 6 tutorial - security
  2. Java-Tips: accessing a secure EJB from a client

如果你知道答案..你能不能给我举个例子?

提前谢谢你!

【问题讨论】:

  • 我知道它很旧,但你的问题是,代码在login.conf 文件中寻找“默认”,这里可能指定了很多,如果你不指定,代码尝试找到一个条目“默认”如下所示。 deafult { com.sun.enterprise.security.auth.login.FileLoginModule required; }; 但是您的配置没有用于验证用户身份的条目。在独立版中,您还需要添加 System.setProperty("java.security.auth.login.config", authFile); 以帮助您的代码找到配置文件。

标签: jakarta-ee ejb eclipse-rcp glassfish-3


【解决方案1】:

您可以尝试在上下文初始化之后调用 pm.login。

我知道这个问题很老了,但在遇到同样的错误后我偶然发现了这个问题,希望能得到解决方案。

我的代码类似于以下内容:

ProgrammaticLogin pm = new ProgrammaticLogin();
pm.login(username, pass, "file", true);
container = EJBContainer.createEJBContainer(properties);

只需按以下方式重新排序即可解决问题:

container = EJBContainer.createEJBContainer(properties);
ProgrammaticLogin pm = new ProgrammaticLogin();
pm.login(username, pass, "file", true);

至少就我的情况而言,这个想法是服务器/我与服务器的连接尚未初始化,因此无法处理登录。

【讨论】:

  • 嗨乔纳特。谢谢你!我会试试这个。我接受了你的回答,因为我认为这是我所缺少的......这是有道理的:)我很久以前试过这个:P 谢谢
【解决方案2】:

您的客户端应用程序似乎缺少一些依赖 jar。

您缺少的类似乎位于:appserv-rt.jar

现在 jar 可能不会随 Eclipse 一起分发。检查是否有 Glassfish 客户端库?

【讨论】:

  • 我做了,但 gf client.jar 不适合程序登录...我知道我缺少 jars..但是你知道独立应用程序需要的所有 jars 吗?
  • 好吧.. appserv-rt.jar 不是问题.. 我包括了所有的罐子,但我仍然无法使用Java EE 6 security连接到EJBs
猜你喜欢
  • 1970-01-01
  • 2012-03-25
  • 2023-03-29
  • 1970-01-01
  • 2014-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多