2014-11-19 2 views
1

세션을 사용하려고하는 Google 애플리케이션 엔진 (Java) 프로젝트가 있습니다. 내 appengine-web.xml 파일에 가지고있는 파일은세션이 GAE 서버에서 작동하지 않습니다. 로컬에서만

<sessions-enabled>true</sessions-enabled> 

입니다. 그런 다음 "login"이라는 API 메서드가있는 UserEndpoint 클래스가 있습니다. 내 응용 프로그램에 로그인하려고 사용자가 합법적 인 경우 내 방법 내에서이 같은 세션을 생성 :

HttpSession session = req.getSession(); 
session.setAttribute("userId", new LongBean(user.getId().longValue())); 

LongBean 객체 직렬화와 같습니다

public class LongBean implements Serializable { 
    private static final long serialVersionUID = 8041280664162299553L; 

    private long longValue; 

    public LongBean(long longValue) { 
     this.longValue = longValue; 
    } 

    public long getLongValue() { 
     return longValue; 
    } 

    public void setLongValue(long longValue) { 
     this.longValue = longValue; 
    } 
} 

. 이제 endpoint에 insertScore라는 또 다른 API 메소드가 있습니다. 세션이 null이 아니고 올바른 "userId"속성이 있는지 확인합니다.

public UserScore insertScore(
     HttpServletRequest req, 
     Score score) throws NotFoundException, ForbiddenException 

후 나는

Object userId = req.getSession().getAttribute("userId"); 

을 수행하는 방법에 대한 서명입니다. 내 문제는 프로젝트가 Google 서버에 배포 될 때 userId 개체가 null이라는 것입니다. 더 격분하게 만드는 것은 그것이 완벽하게 지역적으로 작동한다는 것입니다. 내 문제에 대한 stackoverflow 검색 한 유일한 해결책은 세션을 직렬화 할 수 있지만 내 LongBean 개체를 seralizable 있다는 것을 발견했습니다! 누구든지 내 로컬 호스트에서 작동하지만 내 서버에서는 작동하지 않는 이유를 설명 할 수 있습니까?

편집 : 추가 정보 : 세션이 만들어지고 데이터 저장소의 _ah_SESSION 테이블에 삽입되었음을 데이터 저장소 뷰어에서 확인할 수 있습니다. 내 엔드 포인트에 내 @API 주석에

auth = @ApiAuth(allowCookieAuth = AnnotationBoolean.TRUE) 

추가

답변

0

JSESSIONID 쿠키에 따라서 내 문제를 해결, 와이어를 통해 전송 될 수 있습니다.

관련 문제