Nimble 플러그인을 사용하는 기존 Grails 애플리케이션이 있습니다 (따라서 Apache Shiro 보안이 적용됨).RESTful 서비스 (Grails, Shiro)를위한 세션 쿠키를 어떻게 시뮬레이션합니까?
저는 RESTful JSON API를 추가하고 있습니다.
내 login
방법은 시로에서 세션 ID를 얻기 위해 관리하고 클라이언트에 반환 : 그것은 동일로,
{"sessionId":"61FE89F60F94A4EF7B796783E7A326BC"}
매우 고무적이다 :이 같은 모습
class ApiController {
def login(String username, String password) {
def authToken = new UsernamePasswordToken(username, password)
SecurityUtils.subject.login(authToken)
render(contentType:"text/json") {
[
sessionId: SecurityUtils.subject.getSession().getId()
]
}
}
def getData() {
SecurityUtils.subject... // either expect to already find a properly populated SecurityUtils.subject or a way to otherwise get it
}
}
브라우저에서 쿠키가 전달되는 것을 볼 수 있습니다.
Cookie:auth=Z3Vlc3Q6dGx1c2lz; m=2663:t|34e2:|47ba:t|4e99:t|6ef2:t|370d:t|3c0d:t|64b8:t|2a03:t|18c3:t|79d4:chart|640c:small|678e:3600%7C60|796a:t; OX_plg=swf|sl|wmp|shk|pm; _ga=GA1.1.441292120.1405856016; __atuvc=0%7C47%2C0%7C48%2C0%7C49%2C432%7C50%2C17%7C51; JSESSIONID=61FE89F60F94A4EF7B796783E7A326BC
그러나 이제는 기존의 Nimble/Shiro/Grails/Servlet (어떤 수준인지 확실하지 않음) 인증 필터가 올바른 세션 식별자로이를 인식하고 해당 세션 ID를 세션에 연결하기 위해 모바일 응용 프로그램에서이 JSESSIONID를 제대로 전달하는 방법을 알 수 없습니다. 세션 요청.
val cookie = com.ning.http.client.cookie.Cookie.newValidCookie("JSESSIONID", token, null, token, null, -1, -1, false, false)
val svc = host/"api"/"getData" addCookie cookie
Http(svc OK as.String)
이 나는 또한에 시도 : (newValidCookie
에 아마 내 매개 변수가 모두 정확하지 않지만)
내가 수동으로 (안드로이드에 파견 사용) JSESSIONID=<sessionId>
와 쿠키를 전달하는 시도했지만 아무런 영향이없는 것으로 나타났다 ;jsessionid=<sessionId>
을 URL에 추가하면 아무 것도 수행되지 않습니다.
도 getData()
에서 new Subject.Builder().sessionId(sessionId).buildSubject();
을 시도했지만 .sessionId()
은 String
을 좋아하지 않았습니다.
지금까지 세션 쿠키의 처리가 정확히 어디에서 발생했는지 알지 못했습니다.
모바일 앱이 웹 클라이언트와 동일한 방식으로 애플리케이션을 사용할 수 있도록 세션 쿠키를 올바르게 조합하려면 어떻게해야합니까?
P. 내 플랜 B는 매 요청마다 인증 헤더에 사용자 이름/비밀번호를 전달하고 ApiController
을 매번 subject.login
번 수행하지만, 웹 애플리케이션에 이미 사용 된 세션 ID를 사용하여 수행하는 것이 좋습니다.
뭔가 알아 냈어? 나는 또한 같은 문제에 직면하고있다. –