2016-10-28 3 views
0

Я пытаюсь подключиться к службе весеннего отдыха с помощью приложения для Android. Мой код не работает. Я узнаю из следующего урока: http://websystique.com/spring-security/secure-spring-rest-api-using-oauth2/HttpUrlConnection - приложение для Android - oauth2 авторизация с помощью веб-службы весны

и я пытаюсь сделать эту точку:

«Ask для жетонов [доступа + обновить] с помощью HTTP POST на/OAuth/маркер, с grant_type = пароль и ресурс владельцы полномочия в качестве REQ-Params. Кроме того, отправить учетные данные клиента в заголовке Authorization. POST http://localhost:8080/SpringSecurityOAuth2Example/oauth/token?grant_type=password&username=bill&password=abc123 "

Я пытался сделать это по-другому, не так, как в учебнике, но с использованием HttpURLConnection. Как следует искать параметры для запроса соответствующего запроса? Я имитирую его на своем телефоне, и он имеет соединение с локальной сетью через Wi-Fi.

try { 
     String plainClientCredentials="my-trusted-client:secret"; 
     String base64ClientCredentials = new String(Base64.encodeBase64(plainClientCredentials.getBytes())); 
     URL urlObj = new URL("http://192.168.1.150:8080/Web_Maxim_Manager/oauth/token"); 
     HttpURLConnection urlConn = (HttpURLConnection) urlObj.openConnection(); 
     urlConn.setDoOutput(true); 
     urlConn.setDoInput(true); 
     urlConn.setRequestProperty("Content-Type", "application/json"); 
     urlConn.setRequestProperty("Accept", "application/json"); 
     urlConn.setRequestMethod("POST"); 
     urlConn.setRequestProperty("grant_type", "password"); 
     urlConn.setRequestProperty("username", "bill"); 
     urlConn.setRequestProperty("password", "abc123"); 
     urlConn.setRequestProperty("Authorization", "Basic "+base64ClientCredentials); 
     urlConn.connect(); 
     String response = urlConn.getResponseMessage(); 
     userName.setText(response); 
    } catch (Exception e) { 
     userName.setText("uuuu"); 
     e.printStackTrace(); 
    } 


    W/System.err: java.net.SocketException: socket failed: EACCES (Permission denied) 
W/System.err:  at libcore.io.IoBridge.socket(IoBridge.java:623) 
W/System.err:  at java.net.PlainSocketImpl.create(PlainSocketImpl.java:198) 
W/System.err:  at java.net.Socket.checkOpenAndCreate(Socket.java:687) 
W/System.err:  at java.net.Socket.setSoTimeout(Socket.java:541) 
W/System.err:  at com.android.okhttp.Connection.connect(Connection.java:1179) 
W/System.err:  at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:392) 
W/System.err:  at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:295) 
W/System.err:  at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:373) 
W/System.err:  at com.android.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:106) 
W/System.err:  at runwithme.android.maxim.com.myapplication.activities.MainActivity.onCreate(MainActivity.java:43) 

Я тестировал сервис с приложениями postman, и он работает. Итак, ошибка в моем приложении для Android.

ответ

0

Решено. Проблема заключалась в неправильных разрешениях приложений. Кроме того, необходимо указать:

urlConn.setRequestProperty("grant_type", "password"); 
    urlConn.setRequestProperty("username", "bill"); 
    urlConn.setRequestProperty("password", "abc123"); 

не следует устанавливать в качестве параметров запроса, но они должны быть частью URL-адреса. Разрешения следует устанавливать как:

<uses-permission android:name="android.permission.INTERNET"/> 

 Смежные вопросы

  • Нет связанных вопросов^_^