аутентификация сервера Grails из Android-клиента - PullRequest
0 голосов
/ 19 марта 2012

Я новичок в Grails и Android.Я занимаюсь разработкой приложения, в котором сервер (Grails) предоставляет пользовательские данные, а клиент (Android) выполняет аутентификацию и получает данные.На сервере установлена ​​весенняя защита, и я пытаюсь создать http-сообщение для отправки имени пользователя и пароля.

Используемая мной http-команда - http://10.0.2.2:8080/test/j_spring_security_check?j_username=user1&j_password=pass1, и я использую @Secured('IS_AUTHENTICATED_FULLY') на контроллере, которыйотправляет данные.

Без защиты я не могу получить доступ к данным (приложение grails отображает данные как Json, и я использую соответствующий код на Android для отображения ответа json).Но это не удается, когда страница защищена.Это для моего окончательного академического проекта.

1 Ответ

0 голосов
/ 19 марта 2012

Прежде всего, обратите внимание на метод запроса для вашего веб-приложения. Насколько я знаю, вы должны отправить запрос метода POST. Second Spring security проверяет ваши куки, особенно параметр JSESSIONID, вы просто делаете этот параметр действительным для безопасности Spring, предоставив свои учетные данные. Вы можете проверить это через какой-то сетевой анализатор.

Я выполнил аналогичную задачу, используя HttpCleint, встроенный в Android. Вот листинг кода, который я использовал для реализации собственной системы безопасности.

DefaultHttpClient httpclient = new DefaultHttpClient();
        try {
            HttpGet httpget = new HttpGet("https://yourwebbapp");

            HttpResponse response = httpclient.execute(httpget);
            HttpEntity entity = response.getEntity();

            System.out.println("Login form get: " + response.getStatusLine());
            EntityUtils.consume(entity);

            System.out.println("Initial set of cookies:");
            List<Cookie> cookies = httpclient.getCookieStore().getCookies();
            if (cookies.isEmpty()) {
                System.out.println("None");
            } else {
                for (int i = 0; i < cookies.size(); i++) {
                    System.out.println("- " + cookies.get(i).toString());
                }
            }

            HttpPost httpost = new HttpPost("https://yourwebbapp");

            List <NameValuePair> nvps = new ArrayList <NameValuePair>();
            nvps.add(new BasicNameValuePair("IDToken1", "username"));
            nvps.add(new BasicNameValuePair("IDToken2", "password"));

            httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));

            response = httpclient.execute(httpost);
            entity = response.getEntity();

            System.out.println("Login form get: " + response.getStatusLine());
            EntityUtils.consume(entity);

            System.out.println("Post logon cookies:");
            cookies = httpclient.getCookieStore().getCookies();
            if (cookies.isEmpty()) {
                System.out.println("None");
            } else {
                for (int i = 0; i < cookies.size(); i++) {
                    System.out.println("- " + cookies.get(i).toString());
                }
            }

        } finally {
            // When HttpClient instance is no longer needed,
            // shut down the connection manager to ensure
            // immediate deallocation of all system resources
            httpclient.getConnectionManager().shutdown();
        } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...