微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JAX-WS实做webservice验证

@H_502_1@
在JAX WS标准中,做websevice变得容易,都是用注解等就可以实现了,其中用来做 
webservice的权限也是很容易的,比如要根据用户名密码才能访问ws,下面直接代码
给出对应的例子,使用的是cxf了. 

1 ws接口类 
  
Java代码  

收藏代码

  1. import javax.jws.WebMethod;  
  2. import javax.jws.WebService;  
  3. import javax.jws.soap.soAPBinding;  
  4. import javax.jws.soap.soAPBinding.Style;  
  5.   
  6.    
  7. @WebService  
  8. @SOAPBinding(style = Style.RPC)  
  9. public interface HelloWorld {  
  10.     @WebMethod  
  11.     String getHelloWorldMessage();  
  12. }   

2 WS 接口实现类: 
Java代码  
    @WebService(endpointInterface = "com.ws.HelloWorld")  
  1. class HelloWorldImpl implements HelloWorld {  
  2. @Resource  
  3.     WebServiceContext wsctx;  
  4. @Override  
  5.     public String getHelloWorldMessage() {  
  6.         MessageContext mctx = wsctx.getMessageContext();  
  7.         // 取得报文头  
  8.         Map http_headers =  
  9.             (Map) mctx.get(  
  10.             MessageContext.HTTP_Request_HEADERS);  
  11.         List<String> userList = (List) http_headers.get("Username");  
  12.         List<String> passList = (List) http_headers.get("Password");  
  13.         String username = "";  
  14.         String password = "";  
  15.         if (userList != null) {  
  16.             username = userList.get(0);  
  17.         }  
  18. if (passList !=              password = passList.get(if (username.equals("test")&&password.equals("password")) {  
  19.             return "Hello "  
  20.                 + username +  
  21.                 " to world of Jax WS - Valid User!";  
  22.         } else {  
  23. return " User No Valid!";  
  24.     }  
  25.   其中,其实就是取出header的信息取进行判断是否有这个权限了,很容易明白. 
    3 然后是发布这个ws 
    static void main(String[] args){  
  26.      Endpoint.publish(  
  27.      "http://localhost:9000/ws/hello"new HelloWorldImpl());  
  28.      
  29.  }  

4 客户端去调用这个WS,其中注意要用户名密码的传递,这里为了简单,没用证书等了,sans-serif; font-size:14px; line-height:25.2px">只是示意,实际上是复杂多了: 
 
 class HelloWorldClient {  
  • private final String WS_URL =  
  •             "http://localhost:9000/ws/hello?wsdl";  
  • void main(String[] args) throws Exception {  
  •         URL url = new URL(WS_URL);  
  •         QName qname = new QName(  
  •             "http://ws.test.com/",  
  •             "HelloWorldImplService");  
  •         Service service = Service.create(url, qname);  
  •         HelloWorld hello = service.getPort(HelloWorld.class);  
  •         BindingProvider provider = (BindingProvider) hello;  
  •         Map<String, Object> req_ctx = provider.getRequestContext();  
  •         req_ctx.put(  
  •         BindingProvider.ENDPOINT_ADDRESS_PROPERTY, WS_URL);  
  • //调用用户名密码,用map  
  • Map<String, List<String>> headers = new HashMap<String, List<String>>();  
  •         headers.put("Username", Collections.singletonList("test"));  
  •         headers.put("Password",250)">             Collections.singletonList("password"));  
  •         req_ctx.put(MessageContext.HTTP_Request_HEADERS, headers);  
  • }  

  •   其实核心就是: 
      headers.put("Username",Collections.singletonList("test")); 
            headers.put("Password",sans-serif; font-size:14px; line-height:25.2px">            Collections.singletonList("password")); 
            req_ctx.put(MessageContext.HTTP_Request_HEADERS,headers); 

    在消息头中设置好MAP就可以了. 


    一个简单例子:http://blog.csdn.net/jackphang/article/details/8788178

    版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

    相关推荐