繁体   English   中英

获取HttpSession对象为null

[英]Getting HttpSession object null

我正在使用Spring web mvc,rest api和前端作为angular2。我正在使用HttpSession在spring中创建会话,它在会话中设置了对象,但是当我检索session属性时,它返回null。 下面是我的代码。 任何帮助将不胜感激。

@RequestMapping(value="/getSession", method=RequestMethod.GET)
    public @ResponseBody User getSession(HttpSession session,HttpServletRequest req){
        // session = req.getSession(false);
        User user=(User) session.getAttribute("name");
        System.out.println("name "+user.getName());
        System.out.println("surname "+user.getSurname());
        System.out.println("address "+user.getAddress());
        if(user!= null)
            return user;
        else
            return null;
    }

    @RequestMapping(value="userFormData.html",method = RequestMethod.POST)
    public String setUserForm(@ModelAttribute User user, HttpServletRequest ht, HttpSession session){
        HttpSession se = ht.getSession(true);
        se.setAttribute("name", user);
        String str="Vikram";
        System.out.println("Name "+str);
        List<Address> ad= user.getAddress();
        System.out.println("User");
        User user1=(User)se.getAttribute("name");
        System.out.println("SESSION :"+user1.getName());
        System.out.println("SESSION END :"+user1.getSurname());
        System.out.println(ad.size());
        return "user";
    }

实现您要执行的操作的最佳方法是使用会话范围的bean。 这将使您可以创建可以在其上存储状态的组件,正如名称所暗示的那样,只要会话仍在运行,这些状态将被保留。 请参阅Spring的文档以获取更多详细信息。

我在Restful Services应用程序上维护会话的方法。

RESTful服务是无状态的,因此在每个请求中,我们都需要将一些唯一的标识符作为标头的一部分发送到服务器。

客户端

  • 在客户端维护一个授权令牌(密钥-公共密钥,值-用来标识客户端的唯一值),应该从服务器接收该授权令牌作为初始响应的一部分
  • 理想的授权令牌应包含有关用户和会话有效性的信息,令牌中的值应加密
  • 令牌值应最初从服务器获取,可以使用您选择的算法,但它应该是服务器生成的令牌
  • 在每个RESTful服务调用中,将此令牌添加为请求标头的一部分,以使服务器端能够识别用户

服务器端

  • 收到对RESTful服务的任何请求后,请验证该请求是否具有有效令牌。 如果令牌存在,请对其进行验证,否则请创建一个新令牌,并将其作为响应的一部分发送回去

  • 如果令牌有效,则可以使用多种方式(会话Bean,使用Map的Cache,HttpSession,DB持久性)来还原用户会话,要使用这两种方式中的任何一种来获取会话,您都应该传递唯一键来获取用户会话

  • 因为RESTful是无状态的,所以用于存储和检索用户会话的密钥应该是唯一的,并且需要在所有RESTful服务调用中作为请求标头的一部分来接收。

通常,在RESTful应用程序中维护Session并不是一个好的设计,因为RESTful被设计为无状态的。

除了对超媒体有一般的了解之外,REST客户端不需要有关如何与任何特定应用程序或服务器进行交互的先验知识。

基于休息的体系结构使用无状态协议进行通信。 在无状态协议中,客户端或服务器不会保留任何信息。 如果要根据REST设计Web服务,则应考虑不维护会话这一点。

希望能帮助到你!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM