Glassfish 4中的自定义域:找不到登录模块

时间:2014-05-09 14:12:30

标签: glassfish jaas glassfish-4 java-ee-7

我正在尝试为Glassfish 4创建自定义领域和登录模块。

我按照Glassfish 4 Application Development Guide p中列出的程序进行了操作。 4-6,"创建自定义领域"。

我也按照this article中的步骤进行操作。

我创建了一个扩展com.sun.appserv.security.AppservPasswordLoginModule的loginModule。

我创建了一个扩展com.sun.appserv.security.AppservRealm的领域(SaltRealm)。

我编译成jar,并将jar放在glassfish4 \ glassfish \ domains \ domain1 \ lib中。

我将此添加到\ glassfish4 \ glassfish \ domains \ domain1 \ config \ login.conf:

saltRealm {
   com.example.LoginModule required;
};

我添加到\ glassfish4 \ glassfish \ domains \ domain1 \ config \ domain.xml:

   <auth-realm classname="com.example.SaltRealm" name="saltRealm">
      <property name="jaas-context" value="saltRealm"></property>
    </auth-realm>

我在web.xml中添加了一个部分来使用saltRealm。

<login-config>
    <auth-method>FORM</auth-method>
    <realm-name>saltRealm</realm-name>
    <form-login-config>
        <form-login-page>/login.xhtml</form-login-page>
        <form-error-page>/error.xhtml</form-error-page>
    </form-login-config>
</login-config>

看起来像找到了saltRealm类(我可以告诉构造函数运行)。

但是,似乎找不到登录模块。我收到了这个警告:

WEB9102:Web登录失败:com.sun.enterprise.security.auth.login.common.LoginException:登录失败:无效的空输入:名称

我不确定我在这里失踪了什么。

2 个答案:

答案 0 :(得分:1)

我有类似的问题遵循非常类似的指示,直到一些研究找到了一个缺失的部分。

您应该确保从IASRealm覆盖getJAASContext()。这不是一个抽象方法,但您需要覆盖它,因为返回值用于将域映射到登录模块。所以getJAASContext()应该返回你在login.conf中使用的领域的名称。

在你的情况下:

@Override
public String getJAASContext(){
    return "saltRealm";
}

答案 1 :(得分:0)

您发布的代码段似乎正确无误。要调试您的问题,您可以在调试模式下启动Glassfish并在登录模块中设置断点。

作为替代方案,可以在glassfish控制台中对您的领域进行详细登录:

Configurations - server-config - Logger Settings - Log Levels - javax.enterprise.system.core.security