【问题标题】:SOAP UI API to inject the username and password in the HTTP headerSOAP UI API 在 HTTP 标头中注入用户名和密码
【发布时间】:2014-03-31 11:53:50
【问题描述】:

我正在尝试开发通用 SOAP 客户端 Web 服务。我被困在 HTTP 基本身份验证 部分,我有一个需要这种类型身份验证的服务,并且我使用 SOAP UI API

我的问题是如何使用 SOAP UI API 在基本类型的 HTTP 标头中注入用户名和密码。

我尝试使用此代码,但出现此错误:soap:mustUnderstand = 1

Web Service的认证主类:

     public class BasicAuthAuthorizationInterceptor extends SoapHeaderInterceptor {
        @SuppressWarnings("unchecked")
        @Override
        public void handleMessage(Message message) throws Fault {

            Map<String, List<String>> requestHeaders = (Map<String,

 List<String>>) message
                .get(Message.PROTOCOL_HEADERS);
        List<String> authHeaderList = requestHeaders.get("Authorization");

        if (authHeaderList != null && authHeaderList.size() > 0) {

            if ((authHeaderList.get(0)).equals("Basic c2FicmluZTpzYWJyaW5lcGFzcw==")){
                System.out.println("The user is known +++++++");

            } else {
                sendErrorResponse(message, HttpURLConnection.HTTP_FORBIDDEN);
                System.out.println("The user is unknown -------");
            }
        } else {
            sendErrorResponse(message, HttpURLConnection.HTTP_UNAUTHORIZED);
            // System.out.println("No user ************");
            return;
        }

    }

Web 服务客户端用于验证的方法:

public List<SoapOutput> execute(String user, String pass) throws IOException {

if ((user!=null && pass!=null) && (!user.equals("") && !pass.equals("")))
            {
                // Add WSSecurity parameters
                wsdlRequest.setWssPasswordType("PasswordText");
                wsdlRequest.setUsername(user);
                wsdlRequest.setPassword(pass);
                wsdlRequest.setWssTimeToLive("10000");
            }


            Map<String, List<String>> requestHeaders  = wsdlRequest.getRequestHeaders();
            requestHeaders.put("username", Collections.singletonList(user));
            requestHeaders.put("Password", Collections.singletonList(pass));

            System.out.println("requestHeaders is: " + requestHeaders);

....

【问题讨论】:

    标签: soapui soap-client


    【解决方案1】:

    您可以在上面的客户端中尝试以下代码:

    if ((user!=null && password!=null ) && (!user.equals("") && !password.equals(""))) {
    StringToStringsMap requestHeaders = wsdlRequest.getRequestHeaders();
        String basicAuthentication = getBasicAuthentication(user, password);
        requestHeaders .put("Authorization", basicAuthentication);
        wsdlRequest.setRequestHeaders(requestHeaders );
    }
    
    private String getBasicAuthentication(String user, String password) {
        String token = user + ":" + password;
        try {
            return "Basic "
                    + DatatypeConverter.printBase64Binary(token
                            .getBytes("UTF-8"));
        } catch (UnsupportedEncodingException ex) {
            throw new IllegalStateException("Cannot encode with UTF-8", ex);
        }
    }
    

    【讨论】:

      【解决方案2】:

      试试下面的代码(groovy)

      import com.eviware.soapui.support.types.StringToStringsMap 
      
      def headers = new StringToStringsMap()
      headers.put(testSuite.getPropertyValue("ExampleHeaderName"),testSuite.getPropertyValue("ExampleHeaderValue"))
      
      testStep.getTestRequest().setRequestHeaders(headers)
      

      有关此方法的更多详细信息已在 http://forum.soapui.org/viewtopic.php?t=3746http://www.techinterviewpuzzles.com/2013/07/soapui-add-header-to-all-requests-using.html 进行了讨论

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-10-19
        • 1970-01-01
        • 2012-07-17
        • 1970-01-01
        • 2017-05-24
        • 1970-01-01
        • 2013-04-08
        相关资源
        最近更新 更多