当前位置: 首页 > 知识库问答 >
问题:

配置安全性以通过WS-WFlyEJB0364连接访问EJB被拒绝

杜禄
2023-03-14

[Standalone@localhost:9990/]/subsystem=elytron/filesystem-realm=proxyrealm:add(path=proxy-realm-users,relative-to=jboss.server.config.dir)
{“结果”=>“成功”}

[standalone@localhost:9990/]/subsystem=elytron/filesystem-realm=proxyrealm:add-identity(identity=ejbuser)
{“结果”=>“成功”}

[standalone@localhost:9990/]/subsystem=elytron/filesystem-realm=proxyrealm:set-password(identity=ejbuser,clear={password=12345678})
{“结果”=>“成功”}

[standalone@localhost:9990/]/subsystem=elytron/filesystem-realm=proxyrealm:add-identity-attribute(identity=ejbuser,name=roles,value=[“guest”,“appcitas”])
{“output”=>“success”}

[standalone@localhost:9990/]/subsystem=elytron/simple-role-decoder=from-roles-attribute:add(attribute=roles)
{“结果”=>“成功”}

[standalone@localhost:9990/]/subsystem=elytron/security-domain=proxysd:add(default-realm=proxyrealm,permission-mapper=default-permission-mapper,realms=[{realm=proxyrealm,role-decoder=from-roles-attribute},{realm=local}])
{“结果”=>“成功”}

[独立@localhost:9990/]/subsystem=elytron/sasl-authentication-factory=proxy-application-sasl-authentication:add(mechanism-configurations=[{mechanism-name=jboss-local-user,realm-mapper=local},{mechanism-name=digest-md5,mechanism-realm-configurations=[{realm-name=proxyrealm}]},{mechanism-name=proxyrealm结果“=>”成功“}

[standalone@localhost:9990/]/subsystem=ejb3/application-security-domain=other:add(security-domain=proxysd)
{“结果”=>“成功”}

[standalone@localhost:9990/]/subsystem=remoting/http-connector=http-remoting-connector:write-attribute(name=sasl-authentication-Factory,value=proxy-application-sasl-autentication)
{“结果”=>“成功”,“响应-头”=>{“操作-要求-重新加载”=>true,“进程-状态”=>“重新加载-要求”}}

在mi EJB中,我有

@WebService(
  endpointInterface = "es.ssib.otic.test.prototipoEjbCitas.ApiCitasPublico",
  name = "ApiCitasEjb")
@RolesAllowed("apiCitas")
@Stateless
public class ApiCitasPublicoImpl
    implements ApiCitasPublico {

    @Override
    public @XmlElement(name = "pacienteCitaResponse", required = true) PacienteCitaResponse getPacienteCita(
        @WebParam(name = "datosSolicitante") @XmlElement(required = true) IdPeticion idPaciente) {
   ...
}

而我的jboss-app.xml

<?xml version="1.0" encoding="UTF-8"?>
<jboss-app>
   <security-domain>other</security-domain>
</jboss-app>
  • 用户名:ejbuser
  • 密码:12345678
  • 域:我已经尝试使用other、proxySD、proxyRealm并将其留空
  • pre-emptive auth:我已经将“domain”的上述所有值与“use-global-preference”和“authenticate pre-emptionaly”组合在一起。

在所有情况下,我得到一个

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <soap:Fault>
       <faultcode>soap:Server</faultcode>
       <faultstring>WFLYEJB0364: Invocation on method: public es.ssib.otic.test.prototipoEjbCitas.beans.PacienteCitaResponse es.ssib.otic.test.prototipoEjbCitas.impl.ApiCitasPublicoImpl.getPacienteCita(es.ssib.otic.test.prototipoEjbCitas.beans.IdPeticion) of bean: ApiCitasPublicoImpl is not allowed</faultstring>
    </soap:Fault>
  </soap:Body>
</soap:Envelope>

如果删除安全配置,我就可以毫无问题地通过SoapUI访问。

[standalone@localhost:9990/]/subsystem=elytron/http-authentication-factory=proxy-application-http-authentication:add(http-server-mechanism-factory=global,security-domain=proxysd,mechanism-configurations=[{mechanism-name=basic,mechanism-realm-configuration=[{realm-name=proxyad}]}])
{“结果”=>“成功”}

[standalone@localhost:9990/]/subsystem=undertow/application-security-domain=proxyad:add(http-authentication-factory=proxy-application-http-authentication)
{“结果”=>“成功”}

并将jboss-app.xml中的security-domain的值更改为proxyad,部署EAR时出现错误:

{
“wflyctl0412:未安装的必需服务:”=>[“jboss.security.security-domain.proxyad”],
“wflyctl0180:缺少/不可用依赖项的服务”=>[
“jboss.deployment.subunit.\”prototipoearcitas-0.0.1-snapshot.ear\“.\”prototipoejbcitas-0.0.1-snapshot.jar\“.component.apicitaspublicoimpl.create缺少citas-0.0.1-snapshot.ear\”.\“prototipoejbcitas-0.0.1-snapshot.jar\”.apicitasPublicoImpl缺少[jboss.security.security-domain.proxyad]“
]
}

共有1个答案

东郭昌胤
2023-03-14

有几件事需要注意:

>

  • 要使用HTTP基本身份验证,需要一个Elytronhttp-authentication-factory。关于如何配置此配置的文档可以在这里找到。

    当使用HTTP基本身份验证时,还需要在Undertow子系统中添加application-security-domain映射。请参阅https://developer.jboss.org/thread/276445,了解使用WebServices时与此相关的更多详细信息。

    [standalone@localhost:9990/]/subsystem=elytron/security-domain=proxysd:add(realms=[{realm=proxyrealm,role-decoder=groups-to-roles}],default-realm=proxyrealm,permission-mapper=default-permission-mapper)
    {“结果”=>“成功”}

    [standalone@localhost:9990/]/subsystem=elytron/http-authentication-factory=proxy-http-auth:add(http-server-mechanism-factory=global,security-domain=proxysd,mechanism-configurations=[{mechanism-name=basic,mechanism-realm-configurations=[{realm-name=proxyrealm}]}]
    {“结果”=>“成功”}

    [standalone@localhost:9990/]/subsystem=undertow/application-security-domain=proxysd:add(http-authentication-factory=proxy-http-auth)
    {“结果”=>“成功”}

    [standalone@localhost:9990/]/subsystem=elytron/sasl-authentication-factory=proxy-app-sasl-auth:add(mechanism-configurations=[{mechanism-name=jboss-local-user,realm-mapper=local},{mechanism-name=basic,mechanism-realm-configurations=[{realm-name=proxyrealm}]}],sasl-server-factory=configured,

    [standalone@localhost:9990/]/subsystem=ejb3/application-security-domain=proxysd:add(security-domain=proxysd)
    {“结果”=>“成功”}

    备注:

    >

  • 您可能已经注意到,我从文件系统领域切换到了属性领域。这与问题无关,它只是使调试变得更容易。

  •  类似资料:
    • 我已经按照本教程使用密码和角色配置用户。我遵循的指示是: C:\wildfly-14.0.1.final\bin>jboss-cli.bat 您现在断开了连接。键入“connect”连接到服务器,或键入“help”获取支持的命令列表。 [断开连接/]连接 [standalone@localhost:9990/]/subsystem=elytron/filesystem-realm=proxyrea

    • 我试图通过Jedis客户端连接到redis服务器,但在连接时我得到了以下异常和堆栈跟踪- redisconnectionFailureException:无法获得Jedis连接;嵌套异常是redis.clients.jedis.exceptions.jedisconnectionException:无法从位于org.springframework.data.redis.connection.jed

    • 我已经在Google VM实例(Ubuntu-16.04)中安装了elasticsearch和kibana,并分别进行了配置。我已经检查了elasticsearch和kibana的状态。两者都处于活动(运行状态)。 我已经使用curl-XGET“{ip addr}:9200”命令查看了elasticsearch。输出是 当我试图用curl-XGET“{ip addr}:5601”查看kibana时

    • 问题内容: 我让ELK堆栈在VM内的docker容器中运行。 我可以向ES填充,它可以在Kibana中显示。 我可以使用Logstash读取文件并将其输出到stdout。 但是Logstash无法将数据发送到ES (启用或禁用xpack似乎没有什么不同) 输出 之后,它会在“发送批量请求”,“执行运行状况检查”,“尝试复活”和“意外的池错误”之间保持循环。 随着每一次的同时,我也看到了 问题答案:

    • 我已经创建了谷歌应用程序引擎项目,使用预测Api 1.5v。当我在本地均值localhost:8888使用谷歌o2Auth身份验证与客户端ID和客户端运行时,它对我来说工作正常secret.but当我实时运行它时,它会给出一个错误 Java语言安全AccessControlException:访问被拒绝(“java.io.FilePermission”“/base/data/home/apps/s

    • 我正在用Java RMI编写一个客户机-服务器程序,但遇到了一个错误: java.security.访问控制异常:拒绝访问(java.net.SocketPersion127.0.0.1:1099连接,解析) 我的代码如下: 怎么了?