1

これは HTTP 関連の問題だと思います。

Android デバイスから (JEE6) JBoss AS 7 サーバーで (JAX-RS) RESTeasy サービスを使用したいと考えています。RESTeasyサービスは正常に動作しています。クライアント側でRestlet-Clientを使用しています。これも機能します-セキュリティなし。

web.xml/rest/*のパターンにJAAS フォームベースのセキュリティを使用したいと考えています。そのため、Form-Data (および) を含む HTTP-POST-Request を に送信する必要があります。j_usernamej_password/foo/j_security_check

JSESSIONIDサーバーによる最初の応答から取得します。

  HTTP/1.1 200 OK
  Server: Apache-Coyote/1.1
  Set-Cookie: JSESSIONID=uKUqlkUWdhX2l-FihiWyeSJr.undefined; Path=/foo
  Pragma: No-cache
  Cache-Control: no-cache
  Expires: Thu, 01 Jan 1970 01:00:00 CET
  X-Powered-By: JSF/2.0
  Content-Type: text/html;charset=utf-8
  Content-Length: 1028
  Date: Wed, 15 Aug 2012 11:42:59 GMT

この匿名セッションでは、認証を行っています...

ヘッダ:

  POST /foo/j_security_check HTTP/1.1
  Date: Wed, 15 Aug 2012 11:42:58 GMT
  Accept: text/html
  Host: 172.24.47.5:8080
  User-Agent: Restlet-Framework/2.0.14
  Cookie: JSESSIONID=uKUqlkUWdhX2l-FihiWyeSJr.undefined
  Content-Length: 62
  Content-Language: *
  Content-Type: application/x-www-form-urlencoded; charset=UTF-8

コンテンツ:

j_username=Bob&j_password=a

...そして動作します: JBoss-Security-TRACE :

2012-08-15 13:22:26,829 TRACE [org.jboss.security.auth.spi.DatabaseServerLoginModule] (http-0.0.0.0-0.0.0.0-8080-4)ユーザー「Bob」が認証され、loginOk=true

問題:次のリクエストで、REST-URL を取得したい (Cookie JSESSIONID を使用):

  GET /foo/rest/sync/products HTTP/1.1
  Date: Wed, 15 Aug 2012 11:42:59 GMT
  Accept: application/json
  Host: 172.24.47.5:8080
  User-Agent: Restlet-Framework/2.0.14
  Cookie: JSESSIONID=uKUqlkUWdhX2l-FihiWyeSJr.undefined
  Content-Length: 0

しかし、JSON コンテンツを含むレスポンスを返す代わりに、サーバーは JSF-Login-Page を返しています。

  HTTP/1.1 200 OK
  Server: Apache-Coyote/1.1
  Pragma: No-cache
  Cache-Control: no-cache
  Expires: Thu, 01 Jan 1970 01:00:00 CET
  X-Powered-By: JSF/2.0
  Content-Type: text/html;charset=utf-8
  Content-Length: 936
  Date: Wed, 15 Aug 2012 11:42:59 GMT

  <?xml version="1.0" encoding="utf-8"?> ... ... ... </html>

ブラウザでログインして REST-URL を開くと、正常に動作します。これは、ブラウザによる GET リクエストです。

  GET http://localhost:8080/foo/rest/sync/products HTTP/1.1
  Host: localhost:8080
  Connection: keep-alive
  User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.5 (KHTML, like Gecko)    
  Chrome/19.0.1084.56 Safari/536.5
  Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
  Accept-Encoding: gzip,deflate,sdch
  Accept-Language: de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4
  Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
  Cookie: JSESSIONID=royq26yLd7REOz2otiZdTl6j.undefined

誰にもアイデアがありますか?ブラウザでは問題なく動作するため、問題は最後のリクエスト (GET /foo/rest/sync/products) にあると思います。

ありがとう

4

0 に答える 0