【问题标题】:Shiro+Guice+Chrome, JSESSIONID Cookie is reset on every requestShiro+Guice+Chrome, JSESSIONID Cookie 在每次请求时重置
【发布时间】:2018-12-07 18:35:56
【问题描述】:
我现在真的很绝望,因为我几个小时都无法找出问题所在。我几乎完成了基于 Apache Shiro、Google Guice、Jersey REST 和前端 react+redux 的网络应用程序的构建。直到今天它在 Google Chrome 上运行良好,但突然 Chrome 无法保持会话,因为每次请求都会更改 JSESSIONID。我无法找出问题所在,另一方面,Firefox 工作正常。这对我来说真的很困惑。我在网上搜索了可能的解决方案,并能够找到这个问题,但提供的解决方案都不适用于我。
我在浏览器中创建了Screenshot 的请求。第一个 REST 请求工作正常,然后由于某种原因请求了一个 favicon.ico 文件,该文件设置了一个新的 JSESSIONID。从此会话丢失。我不知道请求可能来自哪里。我从不使用网站图标...
如果您需要更多信息,请告诉我!如果有人能指出我正确的方向,我将不胜感激。我在这里坐了好几个小时试图解决这个问题。
最好的问候!
【问题讨论】:
标签:
google-chrome
react-redux
guice
shiro
jsessionid
【解决方案1】:
天哪,经过数小时的研究,我发现了问题所在,它是仅在 Chrome 上失败的网站图标请求。就我而言,问题是码头重定向规则。我有以下规则:
<Call name="addRule">
<Arg>
<New class="org.eclipse.jetty.rewrite.handler.RewriteRegexRule">
<Set name="regex">^(?:(?!\/rest\/|\/resources\/|\/login).)*$</Set>
<Set name="replacement">/sua-ui/resources/secure/index.jsp</Set>
</New>
</Arg>
</Call>
我现在改为
<Call name="addRule">
<Arg>
<New class="org.eclipse.jetty.rewrite.handler.RewriteRegexRule">
<Set name="regex">^(?:(?!\/rest\/|\/resources\/|\/login|favicon).)*$</Set>
<Set name="replacement">/sua-ui/resources/secure/index.jsp</Set>
</New>
</Arg>
</Call>
这意味着从重定向中排除网站图标解决了我的问题,但我真的不知道为什么失败的网站图标请求设置了一个新的 JSESSIONID cookie。很高兴我的应用再次运行!