不使用cookie的Spring Security会话

nme*_*ego 5 java spring spring-security session-cookies

我正在使用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>
Run Code Online (Sandbox Code Playgroud)

机器没有,也无法保留饼干.所以我无法通过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>
Run Code Online (Sandbox Code Playgroud)

第3步:机器和Web应用程序之间的通信现在使用sessionId.

问题:

  1. 是否可以在Spring Security中基于sessionId将会话分配给连接?在这种情况下,XML中的sessionId就像cookie JSESSIONID一样.我是否可以配置Spring Security,以便从XML而不是HTTP标头或URL中检索sessionID?
  2. 我想知道其他系统是否存在这类问题以及我可以谷歌更多地研究这类问题.

man*_*ish 8

您正在寻找的东西当然是可能的.HTTP会话只是一个容器,用于在请求之间存储Spring Security身份验证令牌.您正在寻找的是在请求之间存储令牌并可靠地为每个请求检索令牌的位置.

在请求之间保存令牌的组件是一个实现org.springframework.security.web.context.SecurityContextRepository.Spring Security提供的一个开箱即用的实现使用HTTP Session作为令牌的存储区域.

同样,在每个请求上检查令牌的组件都是一个实现org.springframework.security.authentication.AuthenticationProvider.至少,您需要实现这两者的实现,以便在HTTP会话之外的每个请求上强制执行用于存储和检查身份验证令牌的自定义策略.

您可以查看我的示例应用程序,以获取基于REST的应用程序的此策略的工作示例.我建议您在HTTP标头而不是请求正文中传递会话信息.它将减少您的实施工作并显着简化解决方案.