Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不使用cookie的Spring安全会话_Java_Spring_Spring Security_Session Cookies - Fatal编程技术网

Java 不使用cookie的Spring安全会话

Java 不使用cookie的Spring安全会话,java,spring,spring-security,session-cookies,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">

我正在使用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>

...
机器没有,也不能保存饼干。因此,我无法通过JSSessionID使用会话数据。我只有在酒吧里找到的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

问题:

  • 在SpringSecurity中,是否可以基于sessionId将会话分配给连接?在本例中,XML中的sessionId的作用类似于CookieJSessionID。我是否可以配置Spring安全性,使其从XML而不是HTTP头或通过URL检索sessionID
  • 我想知道其他系统是否存在此类问题,以及我可以通过谷歌搜索哪些信息来进一步研究此类问题
    你要找的肯定是可能的。HTTP会话只是一个容器,用于在请求之间存储Spring安全认证令牌。您要寻找的是在请求之间存储令牌的位置,并且能够可靠地检索每个请求的令牌

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

    类似地,在每个请求上检查令牌的组件是
    org.springframework.security.authentication.AuthenticationProvider
    的实现。至少,您需要实现这两个,以便在HTTP会话之外的每个请求上执行存储和检查身份验证令牌的自定义策略


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

    我将对此进行研究,并根据您的建议创建一个解决方案。我会再打给你的。在我的情况下,我无法控制客户端机器的工作。我所知道的是,它接收我创建的sessionId,并在后续请求中使用该sessionId。它检查请求头以检查客户端是否发送了会话cookie的等价物。如果是,它将从内存缓存中提取身份验证令牌,并将其附加到正在运行的线程。您将需要从请求主体而不是头中提取令牌。如果我这样做,我将避免对每个请求进行XML反序列化。