我正在使用WSS4JInInterceptor来尝试验证我的客户端。我已经能够创建一个简单的例子。但是,我有一个问题。在我的应用程序中,我使用提供的用户名和密码来尝试打开与数据库的连接。如果连接尝试成功,则用户已经过身份验证,否则登录尝试将被拒绝。使用WSS4JInInterceptor我需要实现一个返回用户密码的回调。在我的安全方案中,我无法访问此密码。我该如何实现这样的东西?
我应该继承WSS4JInInterceptor并破解它以提供密码吗?
答案 0 :(得分:1)
您无法验证然后从数据库中检索用户密码吗?如果您可以请求它,您可能会将其存储在数据库中。当然,您需要保护密码和/或数据库。
答案 1 :(得分:1)
你走了:下面你不会发现我使用回叫处理程序,因为不会真的需要(不是说你不能这样做,但这更简单)。
<jaxws:endpoint id="myService" implementor="#myServiceImpl" address="/myService">
<jaxws:inInterceptors>
<bean class="org.apache.cxf.binding.soap.saaj.SAAJInInterceptor" />
<ref bean="myServiceInterceptor"/>
</jaxws:inInterceptors>
<jaxws:properties>
<entry key="ws-security.ut.validator" value-ref="myServiceUsernameTokenValidator"/>
<jaxws:properties>
</jaxws:endpoint>
<bean id=" myServiceInterceptor " class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">
<constructor-arg>
<map>
<entry key="action" value="UsernameToken" />
<entry key="passwordType" value="PasswordText" />
</map>
</constructor-arg>
</ bean>
在我的 myServiceUsernameTokenValidator 中,我直接连接UserDetailService,从DB获取哈希密码,然后使用
进行验证 stringDigester.matches(passwordText, passwordDigest)