مصادقة JCIFS NTLM لاتصالات HTTP على GlassFish (أو أي حاوية بريمج)

StackOverflow https://stackoverflow.com/questions/1048223

سؤال

ولقد خلقت فئة Java الذي يصل إلى موقع IIS طلب مصادقة NTLM. يستخدم فئة جافا المكتبة JCIFS واستنادا إلى المثال التالي:

Config.registerSmbURLHandler();
Config.setProperty("jcifs.smb.client.domain", domain);
Config.setProperty("jcifs.smb.client.username", user);
Config.setProperty("jcifs.smb.client.password", password);

URL url = new URL(location);
BufferedReader reader = new BufferedReader(
            new InputStreamReader(url.openStream()));
String line;
while ((line = reader.readLine()) != null) {
    System.out.println(line);
}

والمثال يعمل بشكل جيد عند تنفيذ من موجه الأوامر، ولكن بمجرد أن محاولة استخدام نفس الرمز في حاوية بريمج (على وجه التحديد GlassFish)، أحصل على IOException يحتوي على الرسالة "عاد خادم HTTP رمز الاستجابة: 401 ل URL:. .... "

ولقد حاولت تحريك جرة jcifs إلى classpath النظام (٪ GLASSFISH٪ / ليب)، ولكن هذا لا يبدو أن يحدث أي فارق.

هي محل تقدير كبير

واقتراحات.

هل كانت مفيدة؟

المحلول

ويبدو أن ما كنت أحاول ويدعم بالفعل في جاوة 5/6 القيام به، وبالتالي كنت قادرا على إسقاط API JCIFS وتفعل شيئا مثل هذا بدلا من ذلك:

public static String getResponse(final ConnectionSettings settings, 
        String request) throws IOException {

    String url = settings.getUrl() + "/" + request;

    Authenticator.setDefault(new Authenticator() {
        @Override
        public PasswordAuthentication getPasswordAuthentication() {
            System.out.println(getRequestingScheme() + " authentication")
            // Remember to include the NT domain in the username
            return new PasswordAuthentication(settings.getDomain() + "\\" + 
                settings.getUsername(), settings.getPassword().toCharArray());
        }
    });

    URL urlRequest = new URL(url);
    HttpURLConnection conn = (HttpURLConnection) urlRequest.openConnection();
    conn.setDoOutput(true);
    conn.setDoInput(true);
    conn.setRequestMethod("GET");

    StringBuilder response = new StringBuilder();
    InputStream stream = conn.getInputStream();
    BufferedReader in = new BufferedReader(new InputStreamReader(stream));
    String str = "";
    while ((str = in.readLine()) != null) {
        response.append(str);
    }
    in.close();

    return response.toString();
}

نصائح أخرى

ويبدو وكأنه لايوجد JCIFS الحق في انشاء مصنع للتعامل مع عناوين المواقع الخاصة بك داخل Glassfish. يجب عليك التحقق من إعدادات نهج (checkSetFactory).

ووالتكوين # registerSmbURLHandler () قد ابتلاع SecurityException.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top