每当用户在web服务中使用login()时生成随机会话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文件

  • 从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和密码传递给每个方法。

    或者考虑为安全性添加一个自定义处理程序。

    最新更新