我们有以下配置:
Apache的配置与this文章中描述的一样。
SOAP服务在无状态会话bean中实现。像这样:
@WebContext( urlPattern = "/ba/test", authMethod = "BASIC", transportGuarantee = "NONE", secureWSDLAccess = false )
@Stateless
@WebService
@SecurityDomain( "TestDomain" )
@RolesAllowed("TestRole")
public class TestSsb {
@WebMethod
public String testMe(String in) {
return "succeeded";
}
}
A" TestDomain"已配置。
在当前设置中,序列号通过专用的HTTP标头传输,我们在JBOSS配置xml文件中使用自定义登录模块。这很有效。
但是,我们希望尽可能应用标准机制。鉴于此设置不是那么古怪,必须有一种方法来访问登录模块配置中的X509证书信息(例如,使用BaseCertLoginModule)。
这里有两个问题:
我不确定如何继续这样做。任何帮助将不胜感激。
答案 0 :(得分:0)
解决方案开箱即用(经过一些游戏后)。 authMethod =" BASIC"必须设置为authMethod =" CLIENT-CERT"。所以:
@WebContext(contextRoot =" aa / url",urlPattern =" *",authMethod = " CLIENT-CERT",transportGuarantee =" NONE",secureWSDLAccess = false)
接下来,您需要将角色/安全域指定为注释:
@SecurityDomain(" MyCertWebserviceDomain")
@DeclareRoles(值= {" MY_ROLE" })
通过指定DatabaseCertLoginModule。
<security-domain name="MyCertWebserviceDomain">
<authentication>
<login-module code="org.jboss.security.auth.spi.DatabaseCertLoginModule" flag="required">
<module-option name="dsJndiName" value="java:jboss/datasources/DS"/>
<module-option name="verifier" value="org.jboss.security.auth.certs.AnyCertVerifier"/>
<module-option name="rolesQuery" value="select role_name, 'Roles' from identity_role where identity IN(select regexp_replace(?, '.*SERIALNUMBER=([0-9]*), .*','\1') from dual)"/>
</login-module>
</authentication>
</security-domain>
从数据库中获取角色(例如MY_ROLE),并通过证书中的序列号编制索引。
协议需要在JBOSS中设置为AJP。
现在可以从安全主体中获取身份:sessionContext.getCallePrincipal().getName()
。