专栏首页光变Jetty配置自定义的JSESSIONID信息

Jetty配置自定义的JSESSIONID信息

自定义Jetty的JSession的配置

初始化参数表格

Context参数名称

默认值

描述

org.eclipse.jetty.servlet.SessionCookie

JSESSIONID

会话cookie的名称默认是JSESSIONID,可以通过这个Context参数为特定的web应用设置名称

org.eclipse.jetty.servlet.SessionIdPathParameterName

jsessionid

会话URL的参数名称。默认是jsessionid,但可以通过这个Context参数为特定的web应用设置名称。如果值设置为”none”则禁用URL重写

org.eclipse.jetty.servlet.SessionDomain

-

会话域。如果ServletContext配置了该参数,就会使用该值作为会话cookie的域。如果没有设置,会话cookie就不会指定域。

org.eclipse.jetty.servlet.SessionPath

-

会话路径。 如果ServletContext配置了该参数,就会使用该值作为会话cookie的域。如果没有设置,会话cookie路径就会使用ContextPath。

org.eclipse.jetty.servlet.MaxAge

-1

Session的最长有效时间,单位秒.如果ServletContext配置了该参数,就会使用该值作为会话cookie的最大存活时间。如果没有设置,会话cookie的最长存活时间就会使用’-1’作为参数

org.eclipse.jetty.servlet.CheckingRemoteSessionIdEncoding

false

默认值是’false’,如果设置成’true’,Jetty会在调用encodeURL()方法时加入JSESSIONID参数,即使是外部url

如果maxAge为负数,则表示该Cookie仅在本浏览器窗口以及本窗口打开的子窗口内有效,关闭窗口后该Cookie即失效。 maxAge为负数的Cookie,为临时性Cookie,不会被持久化,不会被写到Cookie文件中。 Cookie信息保存在浏览器内存中,因此关闭浏览器该Cookie就消失了。Cookie默认的maxAge值为-1。

使用初始化参数

下面提供了几个示例展示了如何使用初始化参数。

Context参数示例 可以在Web应用的WEB-INF/web.xml文件中指定这些参数。

<?xml version="1.0" encoding="UTF-8"?>
<web-app
  xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
  version="2.5">
  ...
  <context-param>
  <param-name>org.eclipse.jetty.servlet.SessionCookie</param-name>
  <param-value>XSESSIONID</param-value>
  </context-param>
  <context-param>
  <param-name>org.eclipse.jetty.servlet.SessionIdPathParameterName</param-name>
  <param-value>xsessionid</param-value>
  </context-param>
  ...
</web-app>

Jetty应用参数设置 可以在Jetty容器的context xml配置文件或者代码中配置这些参数。

<Configure class="org.eclipse.jetty.webapp.WebAppContext">
  <Set name="contextPath">/test</Set>
  <Set name="war"><SystemProperty name="jetty.home" default="."/>/webapps/test</Set>

  ...

  <Call name="setInitParameter">
    <Arg>org.eclipse.jetty.servlet.SessionCookie</Arg>
    <Arg>XSESSIONID</Arg>
  </Call>
  <Call name="setInitParameter">
    <Arg>org.eclipse.jetty.servlet.SessionIdPathParameterName</Arg>
    <Arg>xsessionid</Arg>
  </Call>
</Configure>

SessionManager示例 可以在SessionManager实例或者代码中配置这些参数。

<Configure class="org.eclipse.jetty.webapp.WebAppContext">
  <Set name="contextPath">/test</Set>
  <Set name="war"><SystemProperty name="jetty.home" default="."/>/webapps/test</Set>

   ...

  <Get name="sessionHandler">
   <Set name="sessionManager">
     <New class="org.eclipse.jetty.server.session.HashSessionManager">
      <Set name="sessionCookie">XSESSIONID</Set>
      <Set name="sessionIdPathParameterName">xsessionid</Set>
     </New>
   </Set>
  </Get>
</Configure>

使用Servlet 3.0 Session配置

随着Servlet规范3.0的出现,有新的API来配置Session处理这些特性。 之前只能通过Jetty指定初始化参数来实现,现在可以使用容器无感知(container-agnostic)的方式通过代码或者web.xml实现。

SessionCookieConfiguration

javax.servlet.SessionCookieConfig类用于设定session处理这些特性。想要了解详细信息,请参考Javadoc文档。 下面是一个示例展示:一个ServletContextListener检索到SessionCookieConfig,并且在context初始化的时候设置新的值。

import javax.servlet.SessionCookieConfig;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class TestListener implements ServletContextListener {

  public void contextInitialized(ServletContextEvent sce) {
    String comment = "This is my special cookie configuration";
    String domain = "foo.com";
    String path = "/my/special/path";
    boolean isSecure = true;
    boolean httpOnly = false;
    int maxAge = 30000;
    String cookieName = "FOO_SESSION";
    SessionCookieConfig scf = sce.getServletContext().getSessionCookieConfig();

    scf.setComment(comment);
    scf.setDomain(domain);
    scf.setHttpOnly(httpOnly);
    scf.setMaxAge(maxAge);
    scf.setPath(path);
    scf.setSecure(isSecure);
    scf.setName(cookieName);
  }

  public void contextDestroyed(ServletContextEvent sce) {

  }
}

你也可以在web.xml中配置session处理这些特性:下面的示例和上面的代码做了完全相同的事情:

<?xml version="1.0" encoding="UTF-8"?>
<web-app
  xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  metadata-complete="true"
  version="3.0">

  <session-config>
    <cookie-config>
      <comment>This is my special cookie configuration</comment>
        <domain>foo.com</domain>
        <http-only>false</http-only>
        <max-age>30000</max-age>
        <path>/my/special/path</path>
        <secure>true</secure>
        <name>FOO_SESSION</name>
     </cookie-config>
  </session-config>
</web-app>

SessionTrackingModes

除了配置会话cookie,从Servlet3.0规范后,你也可以配置 javax.servlet.SessionTrackingMode跟踪session。

如果想要确定容器使用了哪些默认的session跟踪特性,调用以下代码:

javax.servlet.SessionContext.getDefaultSessionTrackingModes();

如果改变session的跟踪模式,调用以下代码:

javax.servlet.SessionContext.setSessionTrackingModes(Set<SessionTrackingMode>);

也可以在web.xml文件中配置跟中模式,例如:

<?xml version="1.0" encoding="UTF-8"?>
<web-app
   xmlns="http://java.sun.com/xml/ns/javaee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
   metadata-complete="true"
   version="3.0">

   <session-config>
      <tracking-mode>URL</tracking-mode>
      <tracking-mode>COOKIE</tracking-mode>
   </session-config>
</web-app>

原文参照 官方文档:Session管理

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 今天我就说三句话

    腾讯NEXT学位
  • 知识体系解决迷茫的你

    最近在星球里群里都有小伙伴说道自己对未来的路比较迷茫,一旦闲下来就不知道自己改干啥,今天我这篇文章就是让你觉得一天给你 25 个小时你都不够用,觉得睡觉都是浪费...

    桃翁
  • 白底黑字or黑底白字,眼睛更喜欢哪一个?

    腾讯大讲堂
  • 「我真的没有改需求」

    非著名程序员
  • 【系统设置】CentOS 修改机器名

    ken.io
  • 这是对付产品经理的一副毒药,程序员慎入

    程序员和产品经理的日常就像是一对天生的冤家,为了需求的实现,几乎天天在争吵。这不,就在昨天各大技术和产品群里一个程序员暴打产品经理的视频火了,被广泛传播。

    非著名程序员
  • SQL中GROUP BY用法示例

    GROUP BY我们可以先从字面上来理解,GROUP表示分组,BY后面写字段名,就表示根据哪个字段进行分组,如果有用Excel比较多的话,GROUP BY比较类...

    Awesome_Tang
  • 复杂业务下向Mysql导入30万条数据代码优化的踩坑记录

    从毕业到现在第一次接触到超过30万条数据导入MySQL的场景(有点low),就是在顺丰公司接入我司EMM产品时需要将AD中的员工数据导入MySQL中,因此楼主负...

    haifeiWu
  • 不只是软件,在线也可以免费下载百度文库了。

    不管是学生,还是职场员工,下载各种文档几乎是不可避免的,各种XXX.docx,XXX.pptx更是家常便饭,人们最常用的就是百度文库,豆丁文库,道客巴巴这些下载...

    课代表
  • 你可以从面试中学到什么?

    讲一下我对面试的一些。。。“偏见”,哈哈,熟悉我的同学们一定要批判的读接下来的内容哈。

    web前端教室

扫码关注云+社区

领取腾讯云代金券