webservice认证

标签: webservice 认证 | 发表时间:2014-12-12 16:02 | 作者:y806839048
出处:http://www.iteye.com
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"));
    }

}

已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [webservice 认证] 推荐:

webservice认证

- - 行业应用 - ITeye博客
1、服务器端,增加拦截认证--ServerPasswordCallback.java.                 throw new WSSecurityException("用户不匹配.                 throw new WSSecurityException("密码不匹配.

JDK6开发WebService及用户认证

- - Java - 编程语言 - ITeye博客
一、编写服务端并发布. public String echo(//指定参数名及命名空间. 二、编写调用WS的客户端. //参数名为WebParam中指定的参数名,未指定参数名时传arg0-argN. //call.addParameter("userName", XMLType.XSD_STRING, ParameterMode.IN); //Style.DOCUMENT,且方法参数没有指定命名空间或Style.RPC.

SOAP Webservice和RESTful Webservice

- - 人月神话的BLOG
REST是一种架构风格,其核心是面向资源,REST专门针对网络应用设计和开发方式,以降低开发的复杂性,提高系统的可伸缩性. REST提出设计概念和准则为:. 1.网络上的所有事物都可以被抽象为资源(resource). 2.每一个资源都有唯一的资源标识(resource identifier),对资源的操作不会改变这些标识.

WebService性能测试

- - ImportNew
(本文也会在最下面通俗的介绍). 这里给一个站内大哥的讲解: http://www.cnblogs.com/Leo_wl/archive/2010/05/20/1740205.html. 简单点就是测试WebService的一个工具. 官网地址: http://www.soapui.org/. ps:官网是英语的,如果你英语不好的话可以使用谷歌浏览器或360极速浏览器,它可以自动把英文转换成中文.

WebService之JAX-WS、CXF、Spring3.0+

- - 博客园_首页
          面对工作的需要,web服务这一块一直都在身边转悠着. 既然工作中需要这些,作为程序员就应该去了解和学习. 下面主要简述采用CXF+Spring+JAX-WS来发布WebService服务,以及创建客户端调用服务.          1、先了解关于WebService的相关概念以及一些专有名词的解释:.

webservice编程基础—cxf

- - ITeye博客
最近研究了一下cxf的使用,主要的步骤如下:. 下载最新的cxf包apache-cxf-2.6.2.tar.zip,并解压,有一个lib文件,里面的jar包,就是webservice需要的(不完全需要,看你的应用,但是懒的分),加载进你的webservice的工程即可. 配置两个配置文件,为beans.xml和web.xml,内容如下:.

[转]JMeter进行WebService测试

- - 小鸥的博客
1. Building a WebService Test Plan参考. 1.   建立WebServiceTest Plan. 参考 http://jmeter.apache.org/usermanual/build-ws-test-plan.html. 1)      添加ThreadGroup.

CXF WEBSERVICE 安全验证

- - 企业架构 - ITeye博客
CXF 封装的接口,不希望对外暴露 WSDL结构,找到的CXF安全认证技术都是基于拦截器,在调用的时候返回认证错误信息, 不能保护WSDL不被看到,后来看到别人的一个实现方式最简单有效,基于URL拦截的安全保护,用FILTER. 现在把这2种安全保护都记录下来,备用. 参考: http://www.myexception.cn/open-source/1505475.html.

avaya vp ivr 调用webservice

- - 行业应用 - ITeye博客
术语:ivr,vp,dd5.0都是指同一个东西. 调用接口,除了利用vp里面自带的webservice接口外,也可以利用纯Java代码.    只要是yyyy-MM-dd的格式,就可以利用date来读. 选择year,month,day那种即可.    vp里面没有循环,只能利用判断和goto来达到要求.

webservice的安全机制3---Filter

- - 博客园_首页
本节摘要:本节继续讨论webservice的安全机制,本节采用servlet的过滤器Filter来实现.    前面讲了webservice的安全机制1和2,本节继续webservice的安全之旅,.    本节采用servlet的Filter的来实现对webservice的安全访问.    在调用webservice之前,过滤器会拦截匹配的请求,只有满足安全要求的客户端才能访问webservice服务.