在Payara中将@RunAs与不同的基于文件的领域一起使用

问题描述 投票:0回答:1

我正在使用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将兑现这一点。但这是应用程序/耳朵宽的,不是我想要的。

但是我的问题是:如果我不使用耳朵,有没有办法指定要使用的领域?

realm glassfish payara java-ee-8
1个回答
0
投票

我很确定您在Payara Server中遇到了一个错误,此错误已在此处修复:https://github.com/payara/Payara/pull/4597。该修复程序将很快在下一版本中发布。

如果要测试此修复程序,则可以从master分支构建Payara Server。或者只是构建dol模块,并用新构建的模块替换dol.jar目录中的modules

© www.soinside.com 2019 - 2024. All rights reserved.