我想定义从 spring security 设置的 session cookie 的路径,以允许从 web 应用程序进行多次登录。例如:
http://localhost:8080/myApp/context1/login
http://localhost:8080/myApp/context2/login
http://localhost:8080/myApp/context3/login
...
基本上,这可以通过覆盖 LoginUrlAuthenticationEntryPoint
、SimpleUrlAuthenticationFailureHandler
、SimpleUrlAuthenticationSuccessHandler
、SimpleUrlLogoutSuccessHandler
来实现。但是我找不到负责设置 cookie 上下文路径的处理程序,我需要从以下位置覆盖它:
/myApp
适当的等价物:
/myApp/context1
这是必需的,以允许并行登录到这些应用程序。
问:如何为tomcat动态改变session cookie(HttpSession)的cookie路径?
最佳答案
您的应用程序容器负责向客户端发送 session cookie。 在 Spring Security 代码中,您只会看到这样的行:
HttpSession session = request.getSession();
Spring Security 源代码中没有 session cookie 创建逻辑。这就是为什么没有用于实现的接口(interface)或用于提供自定义路径的配置属性的原因。
要指定将分配给您的网络应用程序创建的任何 session cookie 的路径,您可以放置:
<web-app>
<session-config>
<cookie-config>
<path></path>
</cookie-config>
</session-config>
</web-app>
在您的 web.xml
描述符中。
但是您希望在一个 Web 应用程序中有多个 session 。 为什么不为每个用户上下文部署新的应用程序?这是最合乎逻辑的方法。
编辑: 恐怕您想实现一些无需修补 session 即可轻松完成的事情。您的问题看起来更像是授权而不是身份验证。也许您需要为每个上下文使用角色?还是访问控制列表?
关于tomcat - Spring 安全上下文路径解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13659734/