我是web服务新手。我试图生成唯一的会话id为每个登录的用户做,在web服务。我想做的是,
- 编写一个java文件,该文件具有登录和注销方法。
- 生成WSDL文件
- 然后生成web服务客户端(使用Eclipse IDE),使用我生成的WSDl文件。
- 使用生成的包(客户端存根)并调用方法。
请让我知道,如果有任何缺陷在我的执行方式。
1。带有所需方法的Java文件
public String login(String userID, String password) {
if (userID.equalsIgnoreCase("sadmin")
&& password.equalsIgnoreCase("sadmin")) {
System.out.println("Valid user");
sid = generateUUID(userID);
} else {
System.out.println("Auth failed");
}
return sid;
}
private String generateUUID(String userID) {
UUID uuID = UUID.randomUUID();
sid = uuID.toString();
userSessionHashMap = new HashMap<String, String>();
userSessionHashMap.put(userID, sid);
return sid;
}
public void logout(String userID) {
Set<String> userIDSet = userSessionHashMap.keySet();
Iterator<String> iterator = userIDSet.iterator();
if (iterator.equals(userID)) {
userSessionHashMap.remove(userID);
}
}
2。生成的WSDL文件
- 从wsdl开发web服务客户端。
4。使用已开发的客户机存根
public static void main(String[] args) throws Exception { ClientWebServiceLogin objClientWebServiceLogin = new ClientWebServiceLogin(); objClientWebServiceLogin.invokeLogin(); } public void invokeLogin() throws Exception { String endpoint = "http://schemas.xmlsoap.org/wsdl/"; String username = "sadmin"; String password = "sadmin"; String targetNamespace = "http://WebServiceLogin"; try { WebServiceLoginLocator objWebServiceLoginLocator = new WebServiceLoginLocator(); java.net.URL url = new java.net.URL(endpoint); Iterator ports = objWebServiceLoginLocator.getPorts(); while (ports.hasNext()) System.out.println("ports Iterator size-->" + ports.next()); WebServiceLoginPortType objWebServiceLoginPortType = objWebServiceLoginLocator .getWebServiceLoginHttpSoap11Endpoint(); String sid = objWebServiceLoginPortType.login(username, password); System.out.println("sid--->" + sid); } catch (Exception exception) { System.out.println("AxisFault at creating objWebServiceLoginStub" + exception); exception.printStackTrace(); } }
在运行这个文件时,我得到以下错误:
谁能提出一个处理这个任务的替代方法?AxisFault faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException faultSubcode: faultString: java.net.ConnectException: Connection refused: connect faultActor: faultNode: faultDetail: {http://xml.apache.org/axis/}stackTrace:java.net.ConnectException: Connection refused: connect
Web服务应该是无状态的,所以拥有"login"one_answers"logout" Web服务方法没有多大意义。
如果你想确保web服务调用的安全性,不幸的是你必须将安全性编码到每个调用中。在您的示例中,这意味着将userId和密码传递给每个方法。
或者考虑为安全性添加一个自定义处理程序。