我正在使用Payara 5.194,并创建了一个网络应用程序(战争)。此webapp包含一个具有@Schedule的单例,该@Schedule定期运行某些方法。它使用@RunAs()指定要使用的角色。
@Singleton
@RunAs("system")
public class MySingleton {
@EJB
MyEjb myEjb;
@Schedule(hour = "*", minute = "*", second = "*", persistent = false)
public void go()
{
myEjb.doSomething(strings);
}
}
我正在使用payara提供的基于文件的默认领域。我在那里添加了一个具有系统角色的用户,它可以正常工作。
现在我需要为我的项目创建一个基于项目的基于文件的领域:
asadmin \
create-auth-realm \
--classname com.sun.enterprise.security.auth.realm.file.FileRealm \
--property "file=/opt/payara/appserver/glassfish/config/project_keyfile:jaas-context=fileRealm" \
ProjectRealm
我添加了一个用户
asadmin \
--passwordfile passwordfile.txt \
create-file-user \
--authrealmname ProjectRealm \
--groups group1:system \
test
当我从默认领域中删除用户时,这将停止工作,这是合乎逻辑的。
我希望系统开始使用新领域。我尝试在web.xml中设置它而没有运气:
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>ProjectRealm</realm-name>
</login-config>
我知道可以告诉payara我的新领域是默认领域,但我不想这样做。顺便说一句,可以这样做
set configs.config.server-config.security-service.default-realm=ProjectRealm
经过进一步调查,我发现如果把这场战争缠在耳朵上,并在glassfish-application.xml中提供以下内容,那么它就可以正常工作。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE glassfish-application PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Java EE Application 6.0//EN" "http://glassfish.org/dtds/glassfish-application_6_0-1.dtd">
<glassfish-application>
<realm>ProjectRealm</realm>
</glassfish-application>
因此,使用耳朵显然可以指定要使用的默认领域。 @RunAs将兑现这一点。但这是应用程序/耳朵宽的,不是我想要的。
但是我的问题是:如果我不使用耳朵,有没有办法指定要使用的领域?
我很确定您在Payara Server中遇到了一个错误,此错误已在此处修复:https://github.com/payara/Payara/pull/4597。该修复程序将很快在下一版本中发布。
如果要测试此修复程序,则可以从master分支构建Payara Server。或者只是构建dol
模块,并用新构建的模块替换dol.jar
目录中的modules
。