2012-12-14 36 views
0

在我使用(球衣)@Context的網絡服務類中,我注入了HttpServletRequest,HttpServletResponse,ServletContext用於身份驗證的對象,我稱之爲ValidateUser servlet。HttpSession在REST風格的Web服務中爲空?

HttpSession session = request.getSession(true); 

到目前爲止一切正常,但是當我打電話:

HttpSession session = request.getSession(false); 
session.invalidate(); 
在退出servlet會話

null

@Path("/server") 
public class WebServer { 
    @Context 
    private ServletContext context; 

    @Context 
    private HttpServletRequest request; 

    @Context 
    private HttpServletResponse response; 

    @POST 
    @Path("/auth") 
    @Consumes(MediaType.APPLICATION_JSON) 
    public Response createTrackInJSON(Track track) throws IOException, ServletException{ 
    .... 
    context.getRequestDispatcher("/ValidateUser")include(request, response); 
    ... 
    }   
} 
在ValidateUser.java

我作爲驗證後創建的會話。我知道寧靜的Web服務是無狀態的,但我需要維護服務器端的會話有沒有什麼辦法可以實現這一目標?那麼@PerSession註釋呢?在這種情況下會有用嗎?

+0

你正在使用哪個服務器? –

+0

@yogeshprajapati Tomcat 7網絡服務器 –

+0

這是拋出任何錯誤?你的代碼是正確的可能是由於你的服務器配置造成的問題。 –

回答

0

這裏有一些方法來調試會話:

  • 你能看到的會話cookie客戶端上創建?
  • 你確定你沒有使用多個前端?也許你需要堅持你的會話到數據庫?
  • 會話是否已超時?驗證呼叫和註銷之間可能需要很長時間嗎?

@PerSession註釋怎麼樣?在這種情況下會有用嗎?

@PerSession將使用相同的底層會話信息。我認爲這不會解決你的問題。

+0

感謝您的答覆,我才知道它很難維護會話在寧靜的web服務,所以我實現了令牌機制。存儲令牌數據庫,而不是創建會話,併爲每個請求我檢查數據庫中的令牌,在註銷我從數據庫刪除令牌。 –

+0

許多Web框架允許您將數據庫中的會話保留在與正在使用的機制類似的數據庫中。很高興它爲你的@PSrinivasgoud工作。 – Gray