当前位置: 首页 > 知识库问答 >
问题:

在Spring会话属性中共享数据

晁国发
2023-03-14

我使用Spring Security和spring MVC。Am在未经身份验证的请求中保留会话中的数据属性(安全性:spring security中无)。我尝试打印会话id。之后,我登录到应用程序。在此创建新会话。我尝试打印会话id。两者都不同。但是当我访问会话属性中的数据时。它是存在的。在我的理解中,由于新会话是在登录后创建的,数据应该丢失,还是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"));
}

两者都在同一SpringMVC控制器中。

共有1个答案

寿元白
2023-03-14

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

将用户的旧会话数据迁移到新会话数据也足够好。

您可以通过以下方式更改此行为

 类似资料:
  • 我目前正在从事一个托管在域上的laravel项目。此应用程序的一部分(某些功能)必须位于不同的域上。我在我的网上找到了一条路。在php中,我用以下命令映射了所有路由: 以及需要以相同方式位于另一个域上,但具有不同域的路由。好啊在主域中,我创建了一个具有src属性的图像: 指向此方法路线: 它起作用了。我在不同的域上共享同一个会话,但是,我想问你们,对于这个案例场景,你们是否知道更好的方法。我知道这

  • 我有一个简单的pojo,其中有一个字段: 现在,我使用两个不同的浏览器窗口(firefox和chrome)作为两个不同的用户登录到我的web应用程序。令我惊讶的是,当我从一个会话设置配额的值(使用)时,新的值将可用于另一个会话(当调用时)。我希望每个用户会话都有自己的bean实例;这不是spring中会话作用域bean的用途吗? 我一定错过了什么。可能是什么? 编辑: 实现类如下所示: 最后,这里

  • 你能帮我编写此代码的Spring mvc风格模拟吗? 如何向会话添加由注释注释的元素,然后访问它?

  • 实际上,我正在尝试在2个不同的插件项目中的2个portlet之间共享数据 以下是我分享数据的步骤: 步骤1:创建名为Senderproj的liferay插件项目,并在Senderport下创建一个portlet,然后在doView方法中编写以下代码 Step2:创建名为Receiverproj的增殖插件项目并创建一个名为Receiverport的portlet,然后在doView方法中编写下面的代

  • 问题内容: 是否有使用节点,表达和redis / predis共享PHPSESSID的最新指南(或示例代码)? 我发现有1-2年的一些教程,它们都使用旧版本的Express或不使用Express。 Express cookie解析器也已弃用。 https://simplapi.wordpress.com/2012/04/13/php-and-node-js-session-share- redi/

  • 我有两个war文件,比如war1和war2 如果am登录应用程序,会话将在war1中创建,如果am导航到war2,我需要相同的会话数据。 我在服务器的context.xml尝试了Cross Context=true,我可以通过将数据存储在servletContext中来访问数据。但问题是一旦我在chrome中登录屏幕,会话数据将存储在servletContext中,数据将保持到应用程序运行。 如果