[已解决]:java webservice 用户验证 (服务端 + 客户端)
2013-07-11 16:30
651 查看
说明:在网上找了一堆 handler验证的东东,试验了一下,没成功。
现在换了一种方式:在 tomcat的配置文件中添加用户角色和用户信息
然后在 webservice的项目配置文件中增加对应的角色。从而达到 用户验证的目的。
开发环境: MyEclipse 10, Tomcat 7
参考:http://www.fengfly.com/plus/view-210099-1.html
先晒一下效果图:
以下是具体操作过程:
一, Server端代码
二, Client端的代码
三, Tomcat的配置文件 及 Server端的配置
四,修改Client端调用webservice的方法
================================================
一, Server端代码
1, 在 MyEclipse 10中 新建一WebService项目:WsAuthServer
1), ITest.java
3), 让MyEclipse 自动生成WebService
注意:如果 是jax-ws方式创建的webservice, 必须 加入JAX-WS 相关的2个包。
加入方法:项目名 右键 --> Build Path --> Add Libraies --> MyEclipse Libraries --> 拉到最下面 ,选中 JAX-WS的2个jar包
如果 发布失败,检查 WebRoot\WEB-INF目录下的sun-jaxws.xml文件:
如果发布成功,我们可以通过这个URL在浏览器中访问:http://localhost:8080/WsAuthServer/TestPort?wsdl
二, Client端的代码
1,在MyEclipse 10 中 新建一个project: WsAuthClient
1), 新建一个 WebServiceClient, 把 刚才的webservice 通过url 方式引入 其中,按MyEclipse提示会自动生成一堆代码。
2), 新建一个 test.java
在 main方法中粘进如下代码:
至此,不需要用户验证的server端和client端已完成。 但我们的主题是 需要加入用户验证,所以我们还得继续下面的步骤。
三, Tomcat的配置文件 及 Server端的配置
1,tomcat配置用户角色及用户信息。
我这里是 tomcat7, 找到 Tomcat 7.0\conf 目录下的 tomcat-users.xml 文件.
WsAuthServer 项目 的 WebRoot\WEB-INFO目录下的web.xml
加入如下内容:
再通过浏览器访问:http://localhost:8080/WsAuthServer/TestPort?wsdl,会让你验证。说明刚才的配置生效了。
四,修改Client端调用webservice的方法
回到client端,重新run一下main中的方法,发现会报错,这时,client端调用webservice的方法需要重新写:
error
request requires HTTP authentication: Unauthorized
如果把 下面的111 换成你自己的密码,又会得到 Result=>Hello: JASON
补充:PC的client端还有另外一种写法:
至此, 一个完整的用户验证结束。非常感谢。
现在换了一种方式:在 tomcat的配置文件中添加用户角色和用户信息
然后在 webservice的项目配置文件中增加对应的角色。从而达到 用户验证的目的。
开发环境: MyEclipse 10, Tomcat 7
参考:http://www.fengfly.com/plus/view-210099-1.html
先晒一下效果图:
以下是具体操作过程:
一, Server端代码
二, Client端的代码
三, Tomcat的配置文件 及 Server端的配置
四,修改Client端调用webservice的方法
================================================
一, Server端代码
1, 在 MyEclipse 10中 新建一WebService项目:WsAuthServer
1), ITest.java
package com.Server; import javax.jws.WebMethod; import javax.jws.WebService; import javax.jws.soap.*; import javax.jws.soap.SOAPBinding.Style; @WebService @SOAPBinding(style = Style.RPC) public interface ITest { @WebMethod public String SayHello(String name); }2), Test.java
package com.Server; import javax.jws.WebService; @WebService(endpointInterface = "com.Server.ITest") public class Test implements ITest { @Override public String SayHello(String name) { return "Hello: " + name; } }
3), 让MyEclipse 自动生成WebService
注意:如果 是jax-ws方式创建的webservice, 必须 加入JAX-WS 相关的2个包。
加入方法:项目名 右键 --> Build Path --> Add Libraies --> MyEclipse Libraries --> 拉到最下面 ,选中 JAX-WS的2个jar包
如果 发布失败,检查 WebRoot\WEB-INF目录下的sun-jaxws.xml文件:
<?xml version = "1.0"?> <endpoints version="2.0" xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime"> <endpoint name="TestPort" implementation="com.Server.TestDelegate" url-pattern="/TestPort"> </endpoint></endpoints>
如果发布成功,我们可以通过这个URL在浏览器中访问:http://localhost:8080/WsAuthServer/TestPort?wsdl
二, Client端的代码
1,在MyEclipse 10 中 新建一个project: WsAuthClient
1), 新建一个 WebServiceClient, 把 刚才的webservice 通过url 方式引入 其中,按MyEclipse提示会自动生成一堆代码。
2), 新建一个 test.java
在 main方法中粘进如下代码:
TestService service = new TestService(); ITest portType = service.getTestPort(); portType.sayHello("JASON");运行,会得到:Result=>Hello: JASON
至此,不需要用户验证的server端和client端已完成。 但我们的主题是 需要加入用户验证,所以我们还得继续下面的步骤。
三, Tomcat的配置文件 及 Server端的配置
1,tomcat配置用户角色及用户信息。
我这里是 tomcat7, 找到 Tomcat 7.0\conf 目录下的 tomcat-users.xml 文件.
<?xml version='1.0' encoding='utf-8'?> <tomcat-users> <role rolename="WsOperator"/> <user username="TomcatWs" password="你的密码(自己设定)" roles="WsOperator"/> </tomcat-users>2,server端配置web.xml
WsAuthServer 项目 的 WebRoot\WEB-INFO目录下的web.xml
加入如下内容:
<security-role> <description>Normal operator user</description> <role-name>WsOperator</role-name> </security-role> <security-constraint> <web-resource-collection> <web-resource-name>Operator Roles Security</web-resource-name> <url-pattern>/TestPort</url-pattern> </web-resource-collection> <auth-constraint> <role-name>WsOperator</role-name> </auth-constraint> <user-data-constraint> <transport-guarantee>NONE</transport-guarantee> </user-data-constraint> </security-constraint> <login-config> <auth-method>BASIC</auth-method> </login-config>将server端的webservice重新发布一次,并重启 tomcat。
再通过浏览器访问:http://localhost:8080/WsAuthServer/TestPort?wsdl,会让你验证。说明刚才的配置生效了。
四,修改Client端调用webservice的方法
回到client端,重新run一下main中的方法,发现会报错,这时,client端调用webservice的方法需要重新写:
package com.TEST; import java.net.URL; import javax.xml.namespace.QName; import javax.xml.ws.BindingProvider; import javax.xml.ws.Service; import com.server.*; public class test { /** * @param args */ public static void main(String[] args) { final String WS_URL = "file:C:/Program Files/Apache Software Foundation/Tomcat 7.0/webapps/WsAuthServer/WEB-INF/wsdl/TestService.wsdl"; final String S_URL = "http://localhost:8080/WsAuthServer/TestPort?wsdl"; URL url; try { url = new URL(WS_URL); QName qname = new QName("http://Server.com/","TestService"); Service service = Service.create(url, qname); ITest port=service.getPort(ITest.class); BindingProvider bp = (BindingProvider) port; bp.getRequestContext().put(BindingProvider.USERNAME_PROPERTY,"TomcatWs"); bp.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "111"); bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,S_URL); String rtnMessage = port.sayHello("JASON"); System.out.println("Result=>" + rtnMessage); } catch (Exception e) { System.out.println("error"); System.out.println(e.getMessage()); } } }RUN一遍,得到如下信息:
error
request requires HTTP authentication: Unauthorized
如果把 下面的111 换成你自己的密码,又会得到 Result=>Hello: JASON
bp.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "111");
补充:PC的client端还有另外一种写法:
final String WS_URL = "file:C:/Program Files/Apache Software Foundation/Tomcat 7.0/webapps/WsAuthServer/WEB-INF/wsdl/TestService.wsdl"; final String S_URL = "http://localhost:8080/WsAuthServer/TestPort?wsdl"; URL url; try { url = new URL(WS_URL); QName qname = new QName("http://Server.com/","TestService"); TestService service = new TestService(url, qname); TestDelegate test = service.getTestPort(); BindingProvider bp = (BindingProvider) test; bp.getRequestContext().put(BindingProvider.USERNAME_PROPERTY,"TomcatWs"); bp.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "你的密码"); bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,S_URL); String rtnMessage = test.sayHello("JASON"); System.out.println("Result=>" + rtnMessage); /* rtnMessage = test.sumCalc(23, 423); System.out.println("Result=>" + rtnMessage); rtnMessage = test.getCurrentServerTime(); System.out.println("Result=>" + rtnMessage); */ /* BindingProvider bp = (BindingProvider) service; Map<String,Object> context = bp.getRequestContext(); context.put(BindingProvider.USERNAME_PROPERTY, "myusername"); context.put(BindingProvider.PASSWORD_PROPERTY, "mypassword");*/ } catch(Exception ex) { System.out.println(ex.getMessage()); } System.out.println("the end.");
至此, 一个完整的用户验证结束。非常感谢。
相关文章推荐
- [已解决]:java webservice 用户验证 (服务端 + 客户端)
- java webservice 用户验证 (服务端 + 客户端)
- java webservice 用户验证 (服务端 + 客户端)
- JAVA WebService 服务端与动态客户端
- JavaWeb使用Filter、动态代理对客户端请求服务端参数中文乱码解决
- 简单java Web Service服务端和Android客户端
- JAVA WebService 服务端与动态客户端
- Java WebService Axis 实例(客户端+服务端)
- PHP5 在调用 JAVA WebService 时遇到的各种问题及解决方法(二)
- wsdl 生成java服务端代码开发,客户端请求,服务端返回错误XXX are not understood解决方法
- kafka安装,管理,以及常见问题的解决【如:服务端是ok的,java客户端却始终调不通】
- java 和 C++ Socket通信(java作为服务端server,C++作为客户端client,解决中文乱码问题GBK和UTF8)
- Java Web Service之客户端实现
- Java Web基础:第十三讲 客户端验证
- android客户端与javaweb服务端通信——登录小demo的启示
- 解决Java call php web webService 中文参数乱码 终极解决方法
- VB.NET客户端调用Axis的Java Web Service实现文件上传
- Java写的一个用户口令加密,验证(有问题,自己解决不了)
- android客户端和java服务端用aes加密结果不一样的解决方法。
- Java Web基础:客户端验证