我已经使用 Google Datastore 在 servlet 中创建了一个登录页面,它工作正常。但有时它会在 URL 中显示 JSESSIONID。
如何阻止 JSESSIONID 通过 URL 发送?为什么它通过 URL 而不是请求消息传递?
背景:我在tomcat上部署了一个使用基于表单的身份验证的javaee webapp.当Web服务器收到登录请求时,它会将请求发送到专用的身份验证服务,该服务验证用户登录(用户ID和密码).成功验证后,用户的会话将在Web服务器中维护.
问题:我在这里编写了一个简单的webpp 源代码,以模拟场景.成功登录后,当前HttpSession实例将失效并创建新实例.对于后登录页面的每个请求,会话都经过验证.设置了一个新JSESSIONIDcookie,用于在会话期间识别用户,直到会话过期或用户注销.可以在浏览器的开发工具中轻松查看此cookie.如果我复制cookie并通过JavaScript(document.cookie="JSESSIONID=xyzz")在不同的浏览器中设置它,然后尝试访问帖子登录页面,则服务器将其识别为有效请求并成功验证会话.提供帖子登录页面,用户不会因用户ID和密码而受到质疑.
POC:用户打开浏览器和输入网址http://localhost:8080/mywebapp/与和日志admin和pass1234.成功登录后http://localhost:8080/mywebapp/home会显示主页.现在,JSESSIONIDCookie被复制并在FireFox中设置.用户进入http://localhost:8080/mywebapp/homeFirefox并显示主页而不会受到userId和密码的质询.
问题:如何通过多个浏览器复制相同的会话,如何防止这种情况?
作为Java Web应用程序的开发人员,我何时需要使用URL重写以及URL重写和转发之间的区别?
我在其他网站上搜索,我得到的是相互矛盾的信息,这取决于你所说的人,SEO人会以不同的方式回答这个问题.
在两种情况下,AFAIK都不会通知客户端(浏览器)更改,并且最终用户看到客户端在从服务器返回休止符时最初请求的完全相同的URL.
请问这个问题是在Java Servlet API的上下文中,其中定义了forward方法和sendRedirect方法,其中重定向和转发完全是两个不同的东西.这个问题是关于forward(由Servlet API中的forward方法定义)和URL重写之间的区别.问题清楚地表明答案应该在Java servlet的上下文中.最重要的是,我何时需要使用URL重写,再次在开发Java Web应用程序的上下文中.