Дайджест-аутентификация HTTP с HttpUrlConnection

Я пытаюсь подключиться к веб-серверу Tomcat на своей машине, используя дайджест-аутентификацию. Я использую область памяти tomcat. Вот как настроен сервер:

1) В server.xml:

<Realm className="org.apache.catalina.realm.MemoryRealm" digest="MD5" />

2) В tomcat-users.xml

<user username="testuser" password="81dc9bdb52d04dc20036dbd8313ed055" roles="test"/>

3) В web.xml моего веб-проекта:

<auth-method>DIGEST</auth-method>

Как видите Я указал в качестве метода дайджеста "MD5" и зашифровал пароль, используя digest.sh Tomcat.

Вот мой код на стороне клиента:

private static void testGet() throws IOException {

    // Create a URL
    URL test = new URL("http://localhost:8080/TestWebProject/TestServlet");

    // Open a connection to the URL
    HttpURLConnection conn = (HttpURLConnection) test.openConnection();

    MessageDigest md5 = null;
    try {
      md5 = MessageDigest.getInstance("MD5");
    } catch(NoSuchAlgorithmException e) {
      e.printStackTrace();
    }

    // Digest password using the MD5 algorithm
    String password = "1234";
    md5.update(password.getBytes());
    String digestedPass = digest2HexString(md5.digest());

    // Set header "Authorization"
    String credentials = "testuser:" + digestedPass;
    conn.setRequestProperty("Authorization", "Digest " + credentials);

    // Print status code and message
    System.out.println("Test HTTP GET method:");
    System.out.println("Status code: " + conn.getResponseCode());
    System.out.println("Message: " + conn.getResponseMessage());
    System.out.println();

}

private static String digest2HexString(byte[] digest)
{
   String digestString="";
   int low, hi ;

   for(int i=0; i < digest.length; i++)
   {
      low =  ( digest[i] & 0x0f ) ;
      hi  =  ( (digest[i] & 0xf0)>>4 ) ;
      digestString += Integer.toHexString(hi);
      digestString += Integer.toHexString(low);
   }
   return digestString ;
}

Я думаю, что мой код на стороне клиента в порядке и конфигурация сервера тоже. Хотя сервер продолжает присылать мне код состояния 401 с сообщением «Неавторизован». Поскольку я не являюсь опытным разработчиком java, я хочу спросить, есть ли у кого-нибудь идея или ошибка в моей реализации. строка 's', целое число 'n' и символ 'c' и возвращает строка, состоящая из 's', дополненная 'c' для создания строка с ...

Я должен определить функцию pad_with_n_chars (s, n, c) , которая принимает строка 's', целое число 'n' и символ 'c' и возвращает строка, состоящая из 's', дополненная 'c' для создания строка с центрированной буквой s длины n. Например, pad_with_n_chars ("собака", 5, "x") должен вернуть строка « xdogx ».

23
задан Josh Lee 24 October 2010 в 14:58
поделиться