加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

webservice安全之WS-Security验证

发布时间:2020-12-17 00:38:19 所属栏目:安全 来源:网络整理
导读:WebService有两种安全机制,一是利用WS-Security将签名和加密头加入SOAP消息,另一个是利用数字证书和数字签 名认证。此篇文章介绍利用cxf实现WS-Security验证。 首先,服务器端配置 在利用webservice和jms实现系统间的数据同步之一介绍的项目中添加: packa


WebService有两种安全机制,一是利用WS-Security将签名和加密头加入SOAP消息,另一个是利用数字证书和数字签

名认证。此篇文章介绍利用cxf实现WS-Security验证。

首先,服务器端配置

在利用webservice和jms实现系统间的数据同步之一介绍的项目中添加:


package com.test.auth;

import java.io.IOException;

import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.UnsupportedCallbackException;

import org.apache.ws.security.WSPasswordCallback;

public class ServerPasswordCallback implements CallbackHandler
{

    public void handle(Callback[] callbacks) throws IOException,UnsupportedCallbackException
    {
        WSPasswordCallback pc = (WSPasswordCallback)callbacks[0];
        
        if(pc.getIdentifier().equals("admin"))
        {
            pc.setPassword("password");
        }
        else
        {
            throw new UnsupportedCallbackException(pc,"check failed");
        }
    }

}

修改spring文件:


?

<!-- 发布ws,其中address的此ws名称 -->
    <jaxws:endpoint id="user" implementor="com.test.UserServiceImpl" address="/user">
        <jaxws:inInterceptors>
		    <bean class="org.apache.cxf.binding.soap.saaj.SAAJInInterceptor" />
			<bean class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">
				<constructor-arg>
					<map>
						<entry key="action" value="UsernameToken" />
						<entry key="passwordType" value="PasswordText" />
						<entry key="user" value="cxfServer" />
						<entry key="passwordCallbackRef">
							<ref bean="serverPasswordCallback" />
						</entry>
					</map>
				</constructor-arg>
			</bean>
		</jaxws:inInterceptors>
    </jaxws:endpoint>
    
    <bean id="serverPasswordCallback" class="com.test.auth.ServerPasswordCallback"/>


?其次,客户端配置如下,在用webservice和jms实现系统间的数据同步之二 介绍的项目中添加:

增加ClientPasswordCallback类:

package com.test.auth;

import java.io.IOException;

import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.UnsupportedCallbackException;

import org.apache.ws.security.WSPasswordCallback;

public class ClientPasswordCallback implements CallbackHandler
{

    public void handle(Callback[] callbacks) throws IOException,UnsupportedCallbackException
    {
        for(Callback cb : callbacks)
        {
            WSPasswordCallback pc = (WSPasswordCallback)cb;
            pc.setIdentifier("admin");
            pc.setPassword("password");
        }
    }

}

修改spring文件:

<!-- webserice接收客户端 -->
	<jaxws:client id="userService"
		address="http://10.78.194.92:8088/webserviceserver/service/user"
		serviceClass="com.test.UserService">
		<jaxws:outInterceptors>
		    <bean class="org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor" />
			<bean class="org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor">
				<constructor-arg>
					<map>
						<entry key="action" value="UsernameToken" />
						<entry key="passwordType" value="PasswordText" />
						<entry key="user" value="cxfClient" />
						<entry key="passwordCallbackRef">
						    <ref bean="clientPasswordCallback"/>
						</entry>
					</map>
				</constructor-arg>
			</bean>
		</jaxws:outInterceptors>
	</jaxws:client>

    <bean id="clientPasswordCallback" class="com.test.auth.ClientPasswordCallback"/>

完毕。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读