从Android客户端验证grails服务器

时间:2012-03-19 09:18:57

标签: android authentication grails

我是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 app将数据呈现为Json,我在Android上使用适当的代码来显示json响应)。但是当页面受到保护时它会失败。这是我最后的学术项目。

1 个答案:

答案 0 :(得分:0)

首先将游览注意力放在您的网络应用程序的请求方法上。 据我所知你应该发送POST方法请求。 第二个Spring安全性检查您的cookie,特别是参数JSESSIONID,您只需使此参数对提供您的凭据的Spring安全性有效。 你可以通过一些网络分析仪检查它。

我使用嵌入在Android中的HttpCleint来完成类似的任务。这是我用来实现自己的安全系统的代码清单。

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();
        }