`
y806839048
  • 浏览: 1107187 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

webservice认证

阅读更多
用客户端new的方式不用配置
有些夸平台的服务调用,会由于本地时间和服务器时间相差较大会报时间戳,验证失效

1、服务器端,增加拦截认证--ServerPasswordCallback.java
public class ServerPasswordCallback implements CallbackHandler {
    private Map<String, String> passwords = new HashMap<String, String>();
    public ServerPasswordCallback() {
        passwords.put("admin", "123456");
        passwords.put("test", "123");
    }

    @Override
    public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
        for (int i = 0; i < callbacks.length; i++) {
            WSPasswordCallback pc = (WSPasswordCallback) callbacks[i];
            if (!passwords.containsKey(pc.getIdentifier()))
                throw new WSSecurityException("用户不匹配!");
            String pass = passwords.get(pc.getIdentifier());
            String pwd = pc.getPassword();

            if (pwd == null || !pwd.equals(pass)) {
                throw new WSSecurityException("密码不匹配!");
            }
        }
    }
}
2、客户端添加安全认证--ClientPasswordCallback.java
public class ClientPasswordCallback implements CallbackHandler {
    private Map<String, String> passwords = new HashMap<String, String>();
    public ClientPasswordCallback() {
        passwords.put("admin", "123456");
        passwords.put("test", "123");
    }

    @Override
    public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
        for (int i = 0; i < callbacks.length; i++) {
            WSPasswordCallback pc = (WSPasswordCallback) callbacks[i];
            int usage = pc.getUsage();
            if (!passwords.containsKey(pc.getIdentifier()))
                throw new WSSecurityException("用户【" + pc.getIdentifier() + "】不存在!");

            String pass = passwords.get(pc.getIdentifier());

            if (usage == WSPasswordCallback.USERNAME_TOKEN && pass != null) {
                pc.setPassword(pass);
                return;
            }
        }
    }
}
3、spring容器配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas  /jaxws.xsd" default-autowire="byName">
    <import resource="classpath:META-INF/cxf/cxf.xml" />
    <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
    <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />

    <!-- 安全认证 -->
    <bean id="WSS4JInInterceptor" class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">
        <constructor-arg>
            <map>
                <entry key="action" value="UsernameToken" />
                <entry key="passwordType" value="PasswordText" />
                <entry key="passwordCallbackClass" value="webservice.ServerPasswordCallback" />
            </map>
        </constructor-arg>
    </bean>
   
    <!-- 开始 -->
    <bean id="chartServiceBean" class="webservice.demo.ChartServiceImpl"/>
    <jaxws:endpoint id="chartService" implementor="#chartServiceBean" address="/chartService" >
        <jaxws:inInterceptors>
            <bean class="org.apache.cxf.binding.soap.saaj.SAAJInInterceptor" /> 
            <ref bean="WSS4JInInterceptor" /> 
        </jaxws:inInterceptors> 
    </jaxws:endpoint>
    <!-- 结束 -->
</beans>
4、webservice接口
@WebService
public interface ChartService {
    /**
     * 一个简单的方法,返回一个字符串
     *
     * @param hello
     * @return
     */
    public String say(String hello);
}

5、webservice接口实现
@WebService(endpointInterface = "webservice.demo.ChartService")
public class ChartServiceImpl implements ChartService {

    /* (non-Javadoc)
     * @see webservice.demo.WebServiceSample#say(java.lang.String)
     */
    @Override
    public String say(String hello) {
        return "hello " + hello;
    }

}
6、客户端调用
public class Test3 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        //调用WebService
        JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
       
//        ClientProxy proxy = (ClientProxy) Proxy.getInvocationHandler(chartService);
//        Client client = proxy.getClient();
       
        Map<String,Object> outProps = new HashMap<String,Object>();
        outProps.put(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN);
        outProps.put(WSHandlerConstants.USER, "admin");
        outProps.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT);
        outProps.put(WSHandlerConstants.PW_CALLBACK_CLASS, ClientPasswordCallback.class.getName());
//        client.getOutInterceptors().add(new SAAJOutInterceptor());
//        client.getOutInterceptors().add(new WSS4JOutInterceptor(outProps));
//        WSS4JOutInterceptor wssOut = new WSS4JOutInterceptor(outProps);
        factory.getOutInterceptors().add(new WSS4JOutInterceptor(outProps));
        factory.getOutInterceptors().add(new SAAJOutInterceptor());

        factory.setAddress("http://localhost:8082/WebService_Server/chartService");
        factory.setServiceClass(ChartService.class);
        ChartService chartService = (ChartService) factory.create();
       
        System.out.println(chartService.say("zhangsan"));
    }

}
分享到:
评论

相关推荐

    WebService 认证

    1.4 WebService认证 认证是确保Web Service安全性的核心组件,它验证用户或系统的身份。主要有以下几种认证方式: 1.4.1.1 Windows认证 - 集成Windows认证:通过配置IIS(Internet Information Services)以启用...

    webservice认证和调用

    在"webservice认证和调用"这个主题中,我们将探讨Web服务的认证机制以及如何进行调用。 **一、Web服务认证** 1. **基本认证(Basic Authentication)**:这是最简单的认证方式,客户端发送用户名和密码的Base64...

    C# 为webservice接口添加认证

    在IT行业中,安全性和认证是任何网络服务的核心要素。针对Web Service接口的认证,特别是当它们需要处理敏感数据或执行关键操作时,至关重要。本文将深入探讨如何在C#环境中为Web Service接口添加SoapHeader认证,这...

    webservice 安全认证请求头信息

    在Web服务领域,WebService安全认证是确保数据传输安全的关键环节。标题“WebService安全认证请求头信息”直指问题的核心,即在调用WebService时,如何通过请求头来传递必要的安全凭证,以验证客户端的身份。这通常...

    powerbuilder12.5开发webservice的详细过程

    在提供的PB_WEBSERVICE_DEMO压缩包中,你可能会找到一个示例项目,包含了完整的Web Service开发流程,包括创建、调用、测试和部署的各个阶段。通过分析和运行这个示例,你将更深入地理解PowerBuilder 12.5开发Web ...

    WebService 身份验证方法及DEMO(.Net版)

    - `一个简单的基于SOAP headers的WebService式身份验证.txt`:这个文件可能专注于讲解如何创建和处理包含认证信息的SOAP Header,以及在服务端验证这些信息的代码示例。 - `AuthForWebServices_demo.zip`:这是一个...

    WebService资料文件下载

    而"在SpringSide实现XFire Webservice认证.pdf"可能涉及了如何在Spring框架中集成XFire,实现WebService的安全认证。 5. **安全与WSSecurity**:"XFire+WSSecurity.pdf"可能涵盖了WebService的安全性,特别是...

    C#WebService-Soap扩展实现安全认证

    分高但绝对值-简介: 1、利用SoapExtension,...3、在写WebService时只需加认证标签,客户端调用时传入SoapHeader,即可完成认证。 4、当然你还可以发挥,比如压缩消息,日志记录,Trace之类,网上也有很多文章讲。

    webService添加basic验证

    ### WebService添加Basic验证详解 在现代Web应用中,安全性和数据保护至关重要。为了确保对外提供的WebService接口不被未授权的第三方访问,一种常见的做法就是在这些接口上实施身份验证机制。其中,Basic验证是一...

    在ASP.NET中调用基于HTTP基本认证的WebService接口

    在 ASP.NET 中调用基于 HTTP 基本认证的WebService 接口 在 ASP.NET 中调用基于 HTTP 基本认证的WebService 接口是指在 ASP.NET 应用程序中调用基于 HTTP 基本认证的 Web 服务接口的方法。HTTP 基本认证是一种常用...

    JDK6开发WebService及用户认证

    【标题】"JDK6开发WebService及用户认证" 在Java世界中,开发Web服务(WebService)是一种常见的数据交换方式,特别是在分布式系统和跨平台通信中。JDK6提供了对WebService的支持,使得开发者能够轻松地创建、发布...

    domino中运用webservice

    WebService是一种基于开放标准(如WSDL、SOAP和UDDI)的互联网通信协议,允许不同平台和语言的应用程序之间交换数据。在Domino中集成WebService,可以极大地扩展其功能,使其能够与其他系统进行无缝交互。 标题...

    c++调用webservice(包括静态和动态以及webservice源码)

    在实际项目中,可能还需要处理错误、认证、重试等复杂情况。例如,对于安全要求较高的服务,可能需要集成SSL/TLS支持,处理证书验证。对于可能出现的网络问题,需要实现重试机制。 总之,C++调用WebService涉及多个...

    NC65开发webservice

    在NC65开发环境中,利用UAP-STUDIO6.5插件开发和发布WebService是一个相对标准的过程,但与之前的版本(如NC633)有所不同。以下是对这一过程的详细说明: 1. **安装插件**: 开发者首先需要安装支持WebService...

    webservice测试

    6. **安全性**:考虑是否实施了必要的安全措施,如认证、授权和加密。 在实际操作中,我们可能需要使用一些工具来辅助测试,比如 SoapUI、Postman 等,它们可以方便地构造和发送SOAP请求,查看响应,并且提供自动化...

    WebService 添加头部验证信息

    当我们谈论"WebService添加头部验证信息"时,通常是指在发送SOAP(Simple Object Access Protocol)消息时,通过添加特定的头部信息来增强安全性与认证机制。在这种情况下,标签“TokenSoapHeader”暗示我们可能在...

    WebServiceStudio C#源码

    - **OptionDialog**:通常用于设置应用程序的配置选项,如HTTP头、认证信息等,允许用户自定义Web服务调用的参数。 - **SearchDialog**:可能是一个搜索或查找功能的对话框,帮助用户在众多的Web服务中快速定位...

    WebService接口测试工具

    9. **安全性测试**:你可以使用这类工具测试服务的安全性,例如验证认证和授权机制,检查潜在的漏洞。 在提供的文件"WebServiceStudio20"中,我们可以推测这是一个特定版本的WebService接口测试工具。使用该工具,...

    LabView调用WebService接口的各种操作

    LabView调用WebService接口是一种常见的数据交互方式,尤其在工业自动化和嵌入式系统中,它允许LabView程序与远程服务器进行数据交换。本教程将详细介绍如何在LabView中使用WebService,包括POST方法用于上传数据和...

Global site tag (gtag.js) - Google Analytics