在JAX WS标准中,做websevice变得容易,都是用注解等就可以实现了,其中用来做?
webservice的权限也是很容易的,比如要根据用户名和密码才能访问ws,下面直接代码,?
给出对应的例子,使用的是cxf了.?
1 ws接口类?
??
- 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();??
- }???
2 WS 接口实现类:?
@WebService(endpointInterface?=?"com.ws.HelloWorld")??
- 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?!=? ????????????password?=?passList.get(if?(username.equals("test")&&password.equals("password"))?{??
- ????????????return?"Hello?"??
- ????????????????+?username?+??
- ????????????????"?to?world?of?Jax?WS?-?Valid?User!";??
- ????????}?else?{??
- return?"?User?No?Valid!";??
- ????}??
- ? 其中,其实就是取出header的信息取进行判断是否有这个权限了,很容易明白.?
3 然后是发布这个ws?
static?void?main(String[]?args){??
- ?????Endpoint.publish(??
- ?????"http://localhost:9000/ws/hello",?new?HelloWorldImpl());??
- ?????
- ?}??
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<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
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|