我认为这是一个与 HTTP 相关的问题。
我想在 Android 设备上的 (JEE6) JBoss AS 7 服务器上使用我的 (JAX-RS) RESTeasy 服务。RESTeasy服务运行良好。我在客户端使用Restlet-Client。这也有效 -没有安全性。
我想为 web.xml 中的模式使用基于 JAAS-Formbased 的/rest/*
安全性。所以我必须将带有表单数据(j_username
和j_password
)的 HTTP-POST-Request 发送到/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),因为在浏览器中它工作正常。
谢谢