我正在使用SpringMVC从我们尝试连接的机器接收HTTP请求。来自机器的XML数据写在HTTP请求主体中。基本上,
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Foo version="2.0" xmlns="http://www.example.com/ns">
<Bar sessionId="2" />
<Baz quux="Monitor" seq="123">
...
</Baz>
</Foo>
机器没有,也无法保留cookie。所以我无法通过JSESSIONID使用会话数据。我只有在Bar中找到的sessionId。我的系统应该在第一次请求时授予此sessionId。也就是说,
第1步:机器向我发送会话请求
步骤2:Web应用程序创建会话,然后向机器发送会话类型响应,然后在后续请求中保存并使用该响应。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Foo version="2.0" xmlns="http://www.example.com/ns">
<Bar sessionId="2" />
<Session quux="Monitor" seq="123">
...
</Session>
</Foo>
步骤3:机器和Web应用程序之间的通信现在使用sessionId。
问题:
答案 0 :(得分:8)
您正在寻找的东西当然是可能的。 HTTP会话只是一个容器,用于在请求之间存储Spring Security身份验证令牌。您正在寻找的是在请求之间存储令牌并可靠地为每个请求检索令牌的地方。
在请求之间保存令牌的组件是org.springframework.security.web.context.SecurityContextRepository
的实现。 Spring Security提供的一个现成实现使用HTTP Session作为令牌的存储区域。
类似地,在每个请求上检查令牌的组件是org.springframework.security.authentication.AuthenticationProvider
的实现。至少,您需要实现这两个实现,以便在HTTP会话之外的每个请求上强制执行自定义策略来存储和检查身份验证令牌。
您可以查看my sample app以获取基于REST的应用程序的此策略的工作示例。我建议您在HTTP标头而不是请求正文中传递会话信息。它将减少您的实施工作并显着简化解决方案。