gpt4 book ai didi

web-services - Glassfish、EJB3、SOAP Web 服务和基本身份验证

转载 作者:行者123 更新时间:2023-12-04 04:14:24 26 4
gpt4 key购买 nike

我正在设置一个带有单个 EJB3 的 glassfish 服务器作为 POC 的模拟后端。在我添加一些基本身份验证之前,一切都运行良好。只需计划文本用户 ID 和密码,对于这项工作没有什么复杂的。我向 EJB 添加了以下注释:

@WebService(name = "Banking", serviceName = "Banking", targetNamespace = BANKING_NAMESPACE)
@DeclareRoles("user")
@Stateless
public class Banking {
...

@RolesAllowed("user")
@SOAPBinding(parameterStyle = ParameterStyle.BARE)
@WebMethod(action = BANKING_NAMESPACE + "/logon", operationName = "logon")
@WebResult(targetNamespace = XmlStrings.BANKING_MODEL_NAMESPACE)
public LogonResponse logon(@WebParam(targetNamespace = XmlStrings.BANKING_MODEL_NAMESPACE) Logon request) throws WebServiceException {
...
}
}

根据我对 EJB3 规范的了解,这对于执行 SOAP 网络服务来说是很常见的。

但是当我发送这个 xml 时:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:mod="http://www.dhcbank.com/banking/model">
<soapenv:Header>
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:UsernameToken wsu:Id="UsernameToken-79" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:Username>fred</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">fred</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</soapenv:Header>
<soapenv:Body>
<mod:logon/>
</soapenv:Body>
</soapenv:Envelope>

我收到以下错误作为 SOAP 错误:

java.lang.Exception: Client not authorized for invocation of public com.dhcbank.www.banking.schema.LogonResponse com.dhcbank.www.banking.Banking.logon(com.dhcbank.www.banking.schema.Logon) throws javax.xml.ws.WebServiceException

在 glassfish 日志中:

[#|2010-10-10T12:49:27.497+1100|INFO|glassfish3.0.1|javax.enterprise.system.core.security|_ThreadID=41;_ThreadName=http-thread-pool-8080-(2);|JACC Policy Provider: Failed Permission Check, context(BankingEAR/Banking_war_internal)- permission((javax.security.jacc.EJBMethodPermission Banking logon,ServiceEndpoint,com.dhcbank.www.banking.schema.Logon))|#]

在 glassfish 管理屏幕中,我添加了一个名为 fred 的用户和一个 fred 密码,并将其分配给一个名为 user 的组。但这没有用。

我做了更多阅读,建议我创建一个 sun-ejb-jar.xml 文件并将其添加到 ear 文件中。所以我用这个内容创建了它:

<sun-ejb-jar>
<enterprise-beans>
<ejb>
<ejb-name>Banking</ejb-name>
<webservice-endpoint>
<port-component-name>Banking</port-component-name>
<login-config>
<auth-method>BASIC</auth-method>
<realm>file</realm>
</login-config>
</webservice-endpoint>
</ejb>
</enterprise-beans>
</sun-ejb-jar>

据我所知,这是正确的。但是,我找不到任何信息告诉我 port-component-name 元素的值应该是什么。所以我不知道我是否理解正确。

安全性似乎仍未发挥作用,我不明白为什么。有没有人对此有任何经验,可以指出我做错了什么或没有做?

最佳答案

我假设您声明的角色“用户”与您的文件领域中的角色名称相同?如果不在您的描述符中提供此映射:

<sun-ejb-jar>
<security-role-mapping>
<role-name>user</role-name>
<group-name>filerealm-group-name</group-name>
</security-role-mapping>
...

关于web-services - Glassfish、EJB3、SOAP Web 服务和基本身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3898709/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com