Аутентификация входа в Android с помощью загрузочного сервера Spring - PullRequest
0 голосов
/ 30 апреля 2018

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

Код сервера для регистрации:

@PostMapping("/register")
public Person addUser(@RequestBody Person user) {
    user.setPassword(encoder.encode(user.getPassword()));
    return userService.saveUser(user);
}

Код сервера для входа в систему:

@PostMapping("/login")
public UserDetails authenticate(@RequestBody Person principal) throws Exception {
    return authService.authenticate(principal);
}

И это хорошо работает. Потому что, если я попытаюсь с почтальоном, я могу хорошо войти.

Это результат почтальона

Также регистрация на andorid работает также. Если я зарегистрирую пользователя с Android, он будет сохранен в моей БД, и с почтальоном я могу войти в систему с этим пользователем.

Это мой дб

Это мой andorid код для регистрации:

class HttpRequestTask extends AsyncTask<Void, Void, Person> {

        @Override
        protected Person doInBackground(Void... params) {
            try {
                final String url = "myurl/register";
                RestTemplate restTemplate = new RestTemplate();
                restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
                Person person= new Person();
                person.setNome(myname);
                person.setCognome(myusername);
                person.setUsername(mynickname);
                person.setPassword(mypassword);
                person.setProfileType(myprofileType);
                return restTemplate.postForObject(url, person, Person.class);
            }

            catch(Exception e){
                Log.e("MainActivity", e.getMessage(), e);
            }

            return null;
        }
    }

И это хорошо работает.

Это мой код Android для входа в систему:

 class HttpRequestTask extends AsyncTask<Void, Void, Person> {

    @Override
    protected Person doInBackground(Void... params) {
        try {
            final String url = "myurl/login";
            RestTemplate restTemplate = new RestTemplate();
            restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
            Person person= new Person();
            person.setUsername(myusername);
            person.setPassword(mypassword);
            return restTemplate.postForObject(url, person, Person.class); 
        }

        catch(Exception e){
            Log.e("MainActivity", e.getMessage(), e);
        }

        return null;
    }
}

Логин не работает.

Должен ли я использовать Spring boot для android?

У кого-нибудь есть пример?

Заранее спасибо!.

1 Ответ

0 голосов
/ 30 апреля 2018

Я думаю, вы должны отправить свой токен авторизации в шапке. Это можно сделать с помощью такого перехватчика, как этот

public class AuthInterceptor implements ClientHttpRequestInterceptor {

    public static final String TAG = "INTERCEPTOR";

    @Bean
    EgomniaLoginManager loginManager;

    @Override
    public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {

        HttpHeaders headers = request.getHeaders();
        headers.set(ACCESS_TOKEN, loginManager.getAccessToken());

        // logga request
        if (BuildConfig.DEBUG) {
            this.logRequest(request, body);
        }

        ClientHttpResponse response = execution.execute(request, body);

        // logga response
        if (BuildConfig.DEBUG) {
//            this.logResponse(response);
            // execute second time because logging consume response body
//            response = execution.execute(request, body);
        }

        return response;
    }
}

Вы должны добавить этот перехватчик к вашему RestTemplate, для этого я использую аннотации Android, поэтому я не помню, как это можно сделать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...