我正在尝试为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:登录失败:无效的空输入:名称
我不确定我在这里失踪了什么。
答案 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