2011-07-26 35 views
0

是新的Web服務生成隨機會話ID。我試圖在Web服務中爲每個用戶所做的登錄生成唯一的會話ID。 我想要做的是,每當用戶在Web服務中使用的登錄()

  1. 寫一個java文件,它有登錄和註銷方法。
  2. 爲其生成WSDL文件。
  3. 然後生成Web服務客戶端(使用Eclipse IDE),與我生成WSDL文件。
  4. 使用生成的包(客戶端存根)並調用方法。

請讓我知道,如果有我的執行方式的任何缺陷。

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文件

  1. 從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 

任何人都可以建議一種處理此任務的替代方法嗎?而這可能是造成這個錯誤的原因。

感謝 -AJ

回答

0

Web服務應該是無狀態的,所以有「登錄」和「註銷」 Web服務方法並沒有多大意義。

如果你想安全的Web服務調用不幸的是你必須代碼的安全性成爲每個呼叫。在你的情況下,這意味着將userId和密碼傳遞給每個方法。

或者考慮添加自定義處理程序的安全性。閱讀更多關於處理程序here

+0

但我聽說有一些所謂的「有狀態Web服務」。如果是的話,這會有幫助嗎?它如何實施? –

+0

看到這篇文章。 http://wso2.org/library/articles/stateful-web-services-axis2。這似乎是很多麻煩:) –

+0

感謝您的資源。 –

相關問題