在spring会话属性中共享数据

时间:2015-10-21 11:54:39

标签: spring-mvc session spring-security

使用弹簧安全和弹簧MVC。我在unAuthenticated请求中保留了session属性中的数据(security:none in spring security)。我尝试打印会话ID。之后我登录了应用程序。这里创建了新会话。我尝试打印会话ID。两者都不同。但是当我访问放置在session属性中的数据时。它存在。根据我的理解,登录后创建新会话,数据应该丢失或者Spring是否正在共享会话属性? 下面是代码。

@RequestMapping(value = "/persistFKey")
public @ResponseBody String persistFKey(HttpServletRequest req,HttpServletResponse res,ModelMap modelMap) {
    System.out.println("SEssion ID ----persistKey ----"+request.getSession().getId());
    String fkey = request.getParameter("fkey");
    modelMap.addAttribute("fkey", fkey);    
    return "success";
}

在spring security xml中,我给了

<sec:http security="none" pattern="/portal/persistFKey" />

登录后,在调用新页面时,我将数据保存在会话属性

@RequestMapping(value = "/renderScreen")
public String renderScreen(HttpServletRequest request, Model model,
@ModelAttribute("srceenModel") ScreenModel srceenModel,ModelMap modelMap) {
    System.out.println("SEssion ID ----renderBooking----"+request.getSession().getId());
    System.out.println("SessionKey persisted --------"+(String)modelMap.get("fkey"));
}

两者都在同一个弹簧MVC控制器中。

1 个答案:

答案 0 :(得分:0)

默认情况下,Spring Security会在登录时更改用户的会话ID,以避免Session Fixation次攻击。

migrate用户的旧会话数据发送到新会话数据也足够了。

您可以通过<session-management session-fixation-protection="..." />

更改此行为