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

JAX-WS实做webservice验证

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


1 ws接口类
   [code="java"]
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.soAPBinding;
import javax.jws.soap.soAPBinding.Style;


 
@WebService
@SOAPBinding(style = Style.RPC)
public interface HelloWorld {
    @WebMethod
    String getHelloWorldMessage();





[/code]


2 WS 接口实现类:
   [code="java"]
@WebService(endpointInterface = "com.ws.HelloWorld")
public class HelloWorldImpl implements HelloWorld {
    @Resource     WebServiceContext wsctx;     @Override     public String getHelloWorldMessage() {         MessageContext mctx = wsctx.getMessageContext();         // 取得报文头         Map http_headers =             (Map) mctx.get(             MessageContext.HTTP_Request_HEADERS);         List<String> userList = (List) http_headers.get("Username");         List<String> passList = (List) http_headers.get("Password");         String username = "";         String password = "";         if (userList != null) {             username = userList.get(0);         }         if (passList != null) {             password = passList.get(0);         }         if (username.equals("test")&&password.equals("password")) {             return "Hello "                 + username +                 " to world of Jax WS - Valid User!";         } else {             return " User No Valid!";         }     }   }  [/code]   其中,其实就是取出header的信息取进行判断是否有这个权限了,很容易明白. 3 然后是发布这个ws    [code="java"]   public static void main(String[] args){        Endpoint.publish(        "http://localhost:9000/ws/hello",new HelloWorldImpl());          } [/code] 4 客户端去调用这个WS,其中注意要用户名密码的传递,这里为了简单,没用证书等了,只是示意,实际上是复杂多了:   [code="java"]  public class HelloWorldClient {     private static final String WS_URL =             "http://localhost:9000/ws/hello?wsdl";     public static 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",            Collections.singletonList("password"));         req_ctx.put(MessageContext.HTTP_Request_HEADERS,headers);     } } [/code]   其实核心就是:   headers.put("Username",            Collections.singletonList("password"));         req_ctx.put(MessageContext.HTTP_Request_HEADERS,headers); 在消息头中设置好MAP就可以了.

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

相关推荐