我知道如何将jsessionid传递给URL.我编码url,它看起来像这样:
mysite.com; jsessionid = 0123456789ABCDEF(http)
是否存在使用Java从URL检索jsessionid的内置方法?我在javadocs中找到了这个方法,isRequestedSessionIdFromURL,但它并没有帮我实际检索该值.我是否必须构建自己的检索方法?
谢谢.
我在Tomcat7和JSF 2.1中使用OmniFaces FullAjaxExceptionHandler来处理ViewExpiredException.我设置了与OmniFaces展示相同的错误页面.在这里查看错误页面,这里是模板.
它工作正常.当会话过期时,我最终会出现expired.xhtml错误页面.但是,当我单击错误页面中的以下链接时,
 <p><a href="#{requestScope['javax.servlet.error.request_uri']}">Back to initial page.</a></p>
然后我得到以下异常:
com.sun.faces.mgbean.ManagedBeanCreationException: An error occurred performing resource injection on managed bean 
这不是一个大问题.无论如何,我需要一个将用户指向主页的按钮.所以我用下面的按钮替换它:
<h:button value="Home" outcome="logout" />
以及此导航案例:
<navigation-rule>
    <from-view-id>*</from-view-id>
    <navigation-case>
        <from-outcome>logout</from-outcome>
        <to-view-id>/stdPortal/index.xhtml</to-view-id>
        <redirect/>
    </navigation-case>
</navigation-rule>
导航将我带到了正确的页面,但会话ID显示在URL中:
https://localhost/stdPortal/index.xhtml;jsessionid=B68784B4ED8882A6575A2EE4012AF1B5
我不想要这个.我怎么摆脱它?我希望网址如下:
https://localhost/stdPortal/index.xhtml
最近我们从URL中删除了jsessionid做了基于cookie的会话管理,以防止"会话劫持攻击"
但我们发现,当启用cookie并且后续请求URL没有jsessionid时,第一个请求URL始终具有jsessionid.
使用第一个网址的jsessionid,我们可以直接点击工作流程中的其他页面
问题:是否有任何安全漏洞仅在第一次请求时暴露jsessionid?
有一个解决方案可以从第一个请求中删除jsessionid,但是想要检查一下,如果它真的很容易要求更改
谢谢J
编辑:我澄清了我的疑问.谢谢你的回复.
我目前正在尝试为Tomcat工作者设置Amazon Load Balancer,但我遇到了一个问题.
我正在使用粘性会话,并且cookie JSESSIONID可用于大多数请求.但有些请求在URL中有会话信息,如下所示:
http://myserver.com/contextPath/someAction;jsessionid=BA6853C23F795BD5EEDAEA996E601BB8
并且它不起作用(并且请求被转发给错误的工作者).
AWS Load Balancer是否支持jsessionidURL?如果不是,可能你知道一些解决方法吗?
使用Apache + mod_proxy_balancer,我可以像这样定义它:
ProxyPassMatch /.* balancer://mycluster stickysession=JSESSIONID|jsessionid 
我想在单击注销按钮时在浏览器中注销我的Web应用程序.并且想要使用js代码实现它.所以,没有注销servlet.这意味着,我需要删除现在使用并存储在浏览器内存中的sessionid,但我该怎么做呢?
我们有一个tomcat实例通过SSL nginx代理服务HTTP.我们按如下方式设置连接器的设置:
connectionTimeout="20000"
redirectPort="8443"
compression="on"
compressionMinSize="2048"
scheme="https"
secure="true"
proxyPort="443"           
compressableMimeType="text/html,text/xml,text/plain,text/css,text/javscript,application/javascript,application/json"
在HttpOnly和SSL上都创建了JSESSIONID cookie.我们希望仅将其限制为SSL,我们似乎无法弄清楚Java中会话cookie创建背后的逻辑.任何提示都将非常感激.

我正在使用auth0/angular2-jwt库在每个请求上附加JWT.
我想知道如何在每个请求上添加JSESSIONID cookie,以便进入服务器端会话?
这是一个好习惯吗?
我试过这个没有成功
let myHeader = new Headers();
myHeader.append('SET-COOKIE', 'JSESSIONID=<jsessionid>');
this.authHttp.get(endpoint, {headers: myHeader, withCredentials: true}).map(res => res.json()).subscribe(
  jwt => {
    ...
  },err => console.log(err));
我正在使用带有jsessionid的URL,例如.
HTTP://本地主机:8080/myservlet; JSESSIONID = 123
然而,每当我在HttpServletRequest中读取会话ID时,该值永远不会是123,而是生成的会话ID,例如.B663A96D3FBC84B4A427C0810EAB9073.
为什么我的jsessionid被忽略了?
我有一个JSF 2.0应用程序,让我们称之为"MyApp",SessionScoped使用下面的代码获取会话并在init上设置路径的bean ...
HttpServletRequest request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();   //Get request from external context
HttpSession session = request.getSession(false);   //Get session and don't create one if it doesn't exist
session.getServletContext().getSessionCookieConfig().setPath(""); //Set the path in the session's cookie
我的问题是更新的路径("")没有显示在响应会话cookie中JSESSIONID,直到第二个请求到应用程序.第一个请求JSESSIONID在响应中使用默认路径获取cookie,其中包括应用程序的根上下文("/ MyApp").如果我重新加载页面,第二个请求将获得一个JSESSIONID包含更新路径("")的cookie 的响应.
我似乎无法找到有关何时JSESSIONID创建默认cookie并将其添加到响应的任何文档.我不确定更新的会话路径是在第一个响应的JSESSIONIDcookie中设置的,还是由页面的默认JSESSIONIDcookie 设置和覆盖.
问题:
我有两个弹簧启动应用程序.
我在application.properties文件中使用此属性设置了端口
server.port=${port:9090}
两个模块都有/ login,/ signup,无需通过以下代码完成身份验证即可访问.
http.authorizeRequests()
            .antMatchers("/signup", "/login").permitAll()
任何其他请求都要求对用户进行身份验证.
如果我一次使用一个模块没有问题,
但是如果尝试在同一时间来回使用它们,那么问题是我每次使用另一个时都必须再次登录到之前的应用程序.例如.
我很确定这是因为模块2重置了jessionid.
HTTP cookie端口是否特定? 我已经阅读了这篇文章,其中指出cookie不是特定于端口的.
但必须有一个解决方案,这样我每次切换应用程序时都不必登录.