Загрузите файл с Интернета с помощью Java: Как пройти проверку подлинности?

Я не уверен, но, я думаю, вы можете использовать @ResponseEntity и @ResponseBody и отправить 2 разных: Успех, а второй - сообщение об ошибке, например:

@RequestMapping(value ="/book2", produces =MediaType.APPLICATION_JSON_VALUE )
@ResponseBody
Book bookInfo2() {
    Book book = new Book();
    book.setBookName("Ramcharitmanas");
    book.setWriter("TulasiDas");
    return book;
}

@RequestMapping(value ="/book3", produces =MediaType.APPLICATION_JSON_VALUE )
public ResponseEntity bookInfo3() {
    Book book = new Book();
    book.setBookName("Ramayan");
    book.setWriter("Valmiki");
    return ResponseEntity.accepted().body(book);
}

. : http://www.concretepage.com/spring-4/spring-4-mvc-jsonp-example-with-rest-responsebody-responseentity

15
задан Community 23 May 2017 в 12:09
поделиться

5 ответов

Вы расширяете класс Authenticator и регистрируете его. Документация javadoc по ссылке объясняет, как.

Я не знаю, работает ли это с методом nio, который получил принятый ответ на вопрос, но он наверняка работает для старомодного способа, который был ответом под этим.

В реализации класса аутентификатора вы, вероятно, собираетесь использовать PasswordAuthentication и переопределить метод getPasswordAuthentication () вашей реализации Authenticator, чтобы вернуть его. Это будет класс, которому передаются нужные вам имя пользователя и пароль.

По вашему запросу, вот некоторый образец кода:

public static final String USERNAME_KEY = "username";
public static final String PASSWORD_KEY = "password";
private final PasswordAuthentication authentication;

public MyAuthenticator(Properties properties) {
    String userName = properties.getProperty(USERNAME_KEY);
    String password = properties.getProperty(PASSWORD_KEY);
    if (userName == null || password == null) {
        authentication = null;
    } else {
        authentication = new PasswordAuthentication(userName, password.toCharArray());
    }
}

protected PasswordAuthentication getPasswordAuthentication() {
    return authentication;
}

И вы регистрируете его в основном методе (или где-нибудь в строке, прежде чем вызывать метод URL):

Authenticator.setDefault(new MyAuthenticator(properties));

Использование простое, но я нахожу API запутанным и отчасти обратным в том, как вы обычно думаете об этих вещах. Довольно типично для синглтон-дизайна.

15
ответ дан 1 December 2019 в 02:10
поделиться

Вы пытались создать свой URL-адрес в форме http: // user: password @ domain / path ?

1
ответ дан 1 December 2019 в 02:10
поделиться

Я бы предложил проверить HttpClient из apache http: / /hc.apache.org/httpclient-3.x/ это упрощает загрузку / аутентификацию

1
ответ дан 1 December 2019 в 02:10
поделиться

Это код, который я написал, который выбирает веб-сайт и отображает его содержимое в System.out. Он использует обычную аутентификацию:

import java.net.*;
import java.io.*;

public class foo {
    public static void main(String[] args) throws Exception {

   URL yahoo = new URL("http://www.MY_URL.com");

   String passwdstring = "USERNAME:PASSWORD";
   String encoding = new 
          sun.misc.BASE64Encoder().encode(passwdstring.getBytes());

   URLConnection uc = yahoo.openConnection();
   uc.setRequestProperty("Authorization", "Basic " + encoding);

   InputStream content = (InputStream)uc.getInputStream();
   BufferedReader in   =   
            new BufferedReader (new InputStreamReader (content));

   String line;
   while ((line = in.readLine()) != null) {
      System.out.println (line);
   }   

   in.close();
}

Проблемы с приведенным выше кодом:

  1. Этот код не готов к производству (но он дает понять суть).

  2. Код дает следующее предупреждение компилятора:

foo.java:11: warning: sun.misc.BASE64Encoder is Sun proprietary API and may be removed in a future release
      sun.misc.BASE64Encoder().encode(passwdstring.getBytes());
              ^ 1 warning

Это действительно нужно использовать класс Authenticator, но, хоть убей, я не мог понять, как, и я не мог найти никаких примеров, что просто показывает, что людям Java на самом деле не нравится, когда вы используете их язык для выполнения крутые вещи. :-P

Таким образом, приведенное выше не является хорошим решением, но оно действительно работает и может быть легко изменено позже.

7
ответ дан 1 December 2019 в 02:10
поделиться

В этой библиотеке с открытым исходным кодом, http://spnego.sourceforge.net также есть несколько примеров того, как использовать ее класс SpnegoHttpURLConnection.

Один из конструкторов в классе позволяет передавать имя пользователя и пароль.

Взгляните на java-документацию класса для примеров.

0
ответ дан 1 December 2019 в 02:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: