Spring MVC Session删除多个请求的属性

时间:2017-10-06 06:31:42

标签: spring-mvc session session-variables

我在这里看到很多关于删除会话属性的问题,这很好,但它不是我想要的。也许我误解了这个。

问题: 我在一个会话中发送两个ajax请求。 当我首先发送ajax-request“RequestA”时,我的属性“AtributeA”将被删除。我知道,在hattpSession中它不再被列出了。 当我向其他处理程序发送第二个ajax-request“RequestB”时,我仍然看到我的属性“AtributeA”。即使来自此对象的哈希值也与“RequestA”中的哈希值相同。也许我犯了错误或者这是正常行为?

我的代码首先使用Requestmapping的ajax-request:“routeA”:

@Controller
@SessionAttributes({"ObjectAA"}){
       @RequestMapping("/routeA")
        public handlerAA(HttpSession session){
              session.removeAttribute("ObjektAA"); //Attribute will be deleted as expected
        }

        @RequestMapping("/routeB")
         public handlerBB(HttpSession session){
               session.getAttribute("ObjektAA");
        }
}

我的代码使用Requestmapping的第二个ajax-request:“routeB”:

@Controller
@SessionAttributes({"ObjectAA"}){
       @RequestMapping("/routeA")
        public handlerAA(HttpSession session){
              session.removeAttribute("ObjectAA");
        }


        @RequestMapping("/routeB")
         public handlerBB(HttpSession session){
               session.getAttribute("ObjectAA");  //ObjectAA is still in the session? how could it be?
        }
}

1 个答案:

答案 0 :(得分:1)

检查此弹簧文档,它将清除您的问题。

<强> org.springframework.web.bind.annotation.SessionAttributes

注释,指示特定处理程序使用的会话属性。 这通常会列出应该透明地存储在模型中的模型属性的名称  会话或一些会话存储,作为表单支持bean。在类型级别声明,  应用于带注释的处理程序类操作的模型属性。 注意:使用此注释指示的会话属性对应于特定处理程序的模型  属性,透明地存储在会话会话中。这些属性将是  处理程序指示其会话会话完成后删除。因此,请使用此  用于此类会话属性的工具,应该临时存储在会话中  在特定处理程序的对话过程中。 对于永久会话属性,例如用户身份验证对象,使用传统  而是session.setAttribute方法。或者,考虑使用属性管理  通用org.springframework.web.context.request.WebRequest接口的功能。 注意:使用控制器接口(例如,用于AOP代理)时,请确保始终如一地使用控制器接口  您的映射注释 - 例如@RequestMapping和@SessionAttributes - on  控制器接口而不是实现类。 以来:      2.5 作者:      Juergen Hoeller      Sam Brannen

如果您觉得有用,请将其标记为有用。 #happycoding