我正在使用WSS4JInInterceptor来尝试验证我的客户端.我已经能够创建一个简单的例子.但是,我有一个问题.在我的应用程序中,我使用提供的用户名和密码来尝试打开与数据库的连接.如果连接尝试成功,则用户已经过身份验证,否则登录尝试将被拒绝.使用WSS4JInInterceptor我需要实现一个返回用户密码的回调.在我的安全方案中,我无法访问此密码.我该如何实现这样的东西?
我应该继承WSS4JInInterceptor并破解它以提供密码吗?
解决方法:
在这里你去:下面你不会发现我使用回叫处理程序,因为不会真的需要(不是说你不能这样做,但这更简单).
<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)