0

我有企业应用程序和企业客户端应用程序(我使用 glassfish 服务器)。为了在客户端应用程序中使用 ProgrammaticLogin,我应该怎么做?每个博客或书籍都描述了如何在数据库中创建表、glassfish 上的 jdbc 领域和映射角色组。就这样。Oracle 官方网站说:

如果启用了安全管理器,则需要 ProgrammaticLoginPermission 权限才能调用应用程序的编程登录机制。有关安全管理器的信息,请参阅 server.policy 文件。默认情况下,此权限不会授予已部署的应用程序,因为这不是标准的 Java EE 机制。

要授予应用程序所需的权限,请将以下内容添加到 domain-dir/config/server.policy 文件:

授予 codeBase "file:jar-file-path" { 权限 com.sun.appserv.security.ProgrammaticLoginPermission "login"; };

但我没有找到任何关于它的例子,所以我不确定它是否是强制性的。更重要的是,我想应该有一个步骤告诉 ProgrammaticLogin 使用哪个领域?现在,ProgrammaticLogin 总是返回 true(对于错误的密码也是如此),我确信这是因为没有教程描述所有必要的步骤。

4

1 回答 1

0

我自己也在尝试同样的事情。到目前为止,我在网上发现的内容也很有趣,javaee5 规范中为此 api 指定的所有方法现在都已弃用,并且指定了带有 char[] arg1(而不是字符串密码)的方法可供使用。这些方法没有任何 api 信息,简单的 password.toCharArray() 根本不起作用。

另一方面,登录虽然部分适用于我。虽然它总是返回 true,但在登录失败时确实会引发异常。但我认为它本身并没有执行登录,即使在执行 ProgrammaticLogin 的登录功能后,容器仍然要求我登录。我在 web 容器中使用它,我想这可能是因为我没有使用提供 HttpServletRequest 和 Response 的功能......我已经在 Glassfish 域的 server.policy 中添加了权限,虽然像这样:

grant codeBase "file:${com.sun.aas.instanceRoot}/applications/-" {
    permission com.sun.appserv.security.ProgrammaticLoginPermission
    "login";
};
grant codeBase "file:${com.sun.aas.instanceRoot}/eclipseApps/-" {
    permission com.sun.appserv.security.ProgrammaticLoginPermission
    "login";
};

编辑:我已经放弃了这种登录方式,至少对于 web 容器。这对于验证 EJB 或类似的东西可能仍然有用,这部分至少可能会起作用。

就我而言,我只是使用了来自此处的 BalusC 的答案Performing user authentication in Java EE / JSF using j_security_check(使用 Servlet 3.0 的 HttpServletRequest.login() ),另一个高票数的答案可能也可以解决问题。

于 2013-07-26T13:05:31.800 回答