为什么session属性为null

时间:2015-05-12 10:06:06

标签: jersey

HTML5 UI连接到后端(REST Jersey到业务逻辑到Hibernate和DB)。我需要为每个用户登录创建和维护一个会话,直到用户退出。

我对如何处理这个问题毫无头绪。

我遵循了这种方法

最初当用户成功登录时,我在会话下设置属性,如下所示

HttpSession session = request.getSession(true);
session.setAttribute("islogged", "islogged");
String value = (String)session.getAttribute("islogged");
System.out.println("****************** The User Logge in Value"+value); 

稍后在另一个页面中,我正在检查用户是否以这种方式登录

public String checkIfUserLoggedIn() throws JSONException,ClassNotFoundException, SQLException
    {
        HttpSession session = request.getSession();
         String value = (String)session.getAttribute("islogged");

        if(value==null)
        {
            // always its coming here only

        }

    }

2 个答案:

答案 0 :(得分:2)

我同意 francesco foresti ,请不要在没有Auth的情况下依赖HTTP会话。这是不安全的,对您的应用来说非常危险。

您是否一直在实施特定的会话机制? 如果没有,那么运动衫将不会存储会话数据。您将进行的每次通话都会为您提供与您的会话ID不同的会话ID。 你必须进行身份验证和使用身份验证令牌来识别您的会话。

  1. 使用JAX-RS 请使用定义的身份验证:https://jersey.java.net/documentation/latest/security.html

    @Path("authentication")
    @Singleton
    public static class MyResource {
        // Jersey will inject proxy of Security Context
        @Context
        SecurityContext securityContext;
    
        @GET
        public String getUserPrincipal() {
            return securityContext.getUserPrincipal().getName();
        }
    }
    
  2. 或使用其他框架:Spring,Shiro ....等 我真的更喜欢这个解决方案,因为另一个框架会为你实现很多东西。你会花很多时间这么做。

  3. 请查看官方球衣文档:https://jersey.java.net/documentation/latest/index.html

答案 1 :(得分:0)

我不会依赖http会话。我的方法是在用户登录时服务器返回的响应头中放置一个“Authorization”字段,并要求用户在每个后续调用中放置相同的头。在此标头中,您可以放置​​有助于服务器查找用户身份的信息 (看一下twitter的例子:https://dev.twitter.com/oauth/overview/authorizing-requests)。服务器可以在数据库中保存有关登录用户的信息,或者您可以在Singleton中创建一个Map,作为服务的“授权网守”。