Jetty Session Persistence By Redis

Copy jar 到$JETTY_HOME/lib/ext目录下

-rw-rw-r--. 1 conversant conversant  100193 Sep 11 17:34 commons-pool-1.5.5.jar
-rw-rw-r--. 1 conversant conversant  228268 Sep 11 17:34 jackson-core-asl-1.9.3.jar
-rw-rw-r--. 1 conversant conversant  773019 Sep 11 17:34 jackson-mapper-asl-1.9.3.jar
-rw-r--r--. 1 conversant conversant  125841 Sep 11 17:34 jedis-2.0.0.jar
-rw-rw-r--. 1 conversant conversant 1991094 Sep 11 17:34 jetty-session-redis-2.4.ga-SNAPSHOT-all.jar
-rw-r--r--. 1 conversant conversant   93525 Sep 11 17:34 logback-access-1.1.2.jar
-rw-r--r--. 1 conversant conversant  270747 Sep 11 17:34 logback-classic-1.1.2.jar
-rw-r--r--. 1 conversant conversant  427729 Sep 11 17:34 logback-core-1.1.2.jar
-rw-rw-r--. 1 conversant conversant  361155 Sep 11 17:34 trove-1.0.2.jar
-rw-rw-r--. 1 conversant conversant   24956 Sep 11 17:34 xpp3_min-1.1.4c.jar
-rw-rw-r--. 1 conversant conversant  431406 Sep 11 17:34 xstream-1.3.1.jar

 

准备jetty-cluster.xml

<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">

<!-- =============================================================== -->
<!-- Documentation of this file format can be found at:              -->
<!-- http://wiki.eclipse.org/Jetty/Reference/jetty.xml_syntax        -->
<!--                                                                 -->
<!-- Additional configuration files are available in $JETTY_HOME/etc -->
<!-- and can be mixed in. See start.ini file for the default         -->
<!-- configuration files.                                            -->
<!--                                                                 -->
<!-- For a description of the configuration mechanism, see the       -->
<!-- output of:                                                      -->
<!--   java -jar start.jar -?                                        -->
<!-- =============================================================== -->

<!-- =============================================================== -->
<!-- Configure a Jetty Server instance with an ID "Server"           -->
<!-- Other configuration files may also configure the "Server"       -->
<!-- ID, in which case they are adding configuration to the same     -->
<!-- instance.  If other configuration have a different ID, they     -->
<!-- will create and configure another instance of Jetty.            -->
<!-- Consult the javadoc of o.e.j.server.Server for all              -->
<!-- configuration that may be set here.                             -->
<!-- =============================================================== -->
<Configure id="Server" class="org.eclipse.jetty.server.Server">

   <!-- =========================================================== -->
    <!-- Configure the Server Thread Pool.                           -->
    <!-- The server holds a common thread pool which is used by      -->
    <!-- default as the executor used by all connectors and servlet  -->
    <!-- dispatches.                                                 -->
    <!--                                                             -->
    <!-- Configuring a fixed thread pool is vital to controlling the -->
    <!-- maximal memory footprint of the server and is a key tuning  -->
    <!-- parameter for tuning.  In an application that rarely blocks -->
    <!-- then maximal threads may be close to the number of 5*CPUs.  -->
    <!-- In an application that frequently blocks, then maximal      -->
    <!-- threads should be set as high as possible given the memory  -->
    <!-- available.                                                  -->
    <!--                                                             -->
    <!-- Consult the javadoc of o.e.j.util.thread.QueuedThreadPool   -->
    <!-- for all configuration that may be set here.                 -->
    <!-- =========================================================== -->
    <Arg name="threadpool">
      <New id="threadpool" class="org.eclipse.jetty.util.thread.QueuedThreadPool">
        <Arg name="minThreads" type="int"><Property name="threads.min" default="10"/></Arg>
        <Arg name="maxThreads" type="int"><Property name="threads.max" default="200"/></Arg>
        <Arg name="idleTimeout" type="int"><Property name="threads.timeout" default="60000"/></Arg>
        <Set name="detailedDump">false</Set>
      </New>
    </Arg>

    <!-- =========================================================== -->
    <!-- Add shared Scheduler instance                               -->
    <!-- =========================================================== -->
    <Call name="addBean">
      <Arg>
        <New class="org.eclipse.jetty.util.thread.ScheduledExecutorScheduler"/>
      </Arg>
    </Call>

    <!-- =========================================================== -->
    <!-- Http Configuration.                                         -->
    <!-- This is a common configuration instance used by all         -->
    <!-- connectors that can carry HTTP semantics (HTTP, HTTPS, SPDY)-->
    <!-- It configures the non wire protocol aspects of the HTTP     -->
    <!-- semantic.                                                   -->
    <!--                                                             -->
    <!-- This configuration is only defined here and is used by      -->
    <!-- reference from the jetty-http.xml, jetty-https.xml and      -->
    <!-- jetty-spdy.xml configuration files which instantiate the    -->
    <!-- connectors.                                                 -->
    <!--                                                             -->
    <!-- Consult the javadoc of o.e.j.server.HttpConfiguration       -->
    <!-- for all configuration that may be set here.                 -->
    <!-- =========================================================== -->
    <New id="httpConfig" class="org.eclipse.jetty.server.HttpConfiguration">
      <Set name="secureScheme">https</Set>
      <Set name="securePort"><Property name="jetty.https.port" default="8443" /></Set>
      <Set name="outputBufferSize">32768</Set>
      <Set name="requestHeaderSize">8192</Set>
      <Set name="responseHeaderSize">8192</Set>
      <Set name="sendServerVersion">true</Set>
      <Set name="sendDateHeader">false</Set>
      <Set name="headerCacheSize">512</Set>

      <!-- Uncomment to enable handling of X-Forwarded- style headers
      <Call name="addCustomizer">
        <Arg><New class="org.eclipse.jetty.server.ForwardedRequestCustomizer"/></Arg>
      </Call>
      -->
    </New>
    
    <Call name="addConnector">
        <Arg>
          <New class="org.eclipse.jetty.server.ServerConnector">
            <Arg name="server"><Ref refid="Server" /></Arg>
            <Arg name="factories">
              <Array type="org.eclipse.jetty.server.ConnectionFactory">
                <Item>
                  <New class="org.eclipse.jetty.server.HttpConnectionFactory">
                    <Arg name="config"><Ref refid="httpConfig" /></Arg>
                  </New>
                </Item>
              </Array>
            </Arg>
            <Set name="host"><Property name="jetty.host" /></Set>
            <Set name="port"><Property name="jetty.port" default="8080" /></Set>
            <Set name="idleTimeout"><Property name="http.timeout" default="30000"/></Set>
          </New>
        </Arg>
      </Call>
      
      <Call id="httpsConnector" name="addConnector">
        <Arg>
          <New class="org.eclipse.jetty.server.ServerConnector">
            <Arg name="server"><Ref refid="Server" /></Arg>
              <Arg name="factories">
                <Array type="org.eclipse.jetty.server.ConnectionFactory">
                  <Item>
                    <New class="org.eclipse.jetty.server.SslConnectionFactory">
                      <Arg name="next">http/1.1</Arg>
                      <Arg name="sslContextFactory"><Ref refid="sslContextFactory"/></Arg>
                    </New>
                  </Item>
                  <Item>
                    <New class="org.eclipse.jetty.server.HttpConnectionFactory">
                      <Arg name="config"><Ref refid="sslHttpConfig"/></Arg>
                    </New>
                  </Item>
                </Array>
              </Arg>
              <Set name="host"><Property name="jetty.host" /></Set>
              <Set name="port"><Property name="jetty.https.port" default="8443" /></Set>
              <Set name="idleTimeout">30000</Set>
            </New>
        </Arg>
      </Call>


    <!-- =========================================================== -->
    <!-- Set the default handler structure for the Server            -->
    <!-- A handler collection is used to pass received requests to   -->
    <!-- both the ContextHandlerCollection, which selects the next   -->
    <!-- handler by context path and virtual host, and the           -->
    <!-- DefaultHandler, which handles any requests not handled by   -->
    <!-- the context handlers.                                       -->
    <!-- Other handlers may be added to the "Handlers" collection,   -->
    <!-- for example the jetty-requestlog.xml file adds the          -->
    <!-- RequestLogHandler after the default handler                 -->
    <!-- =========================================================== -->
    <Set name="handler">
      <New id="Handlers" class="org.eclipse.jetty.server.handler.HandlerCollection">
        <Set name="handlers">
         <Array type="org.eclipse.jetty.server.Handler">
             <!-- 
           <Item>
             <New id="Contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/>
           </Item>
           <Item>
             <New id="DefaultHandler" class="org.eclipse.jetty.server.handler.DefaultHandler"/>
           </Item>
            -->
            <Item>
               <New class="org.eclipse.jetty.webapp.WebAppContext">
                    <Set name="contextPath">/</Set>
                    <Set name="war"><SystemProperty name="project.home" default="."/>/webapps</Set>
                    <Set name="defaultsDescriptor"><SystemProperty name="project.home" default="."/>/conf/jetty/webdefault.xml</Set>
                    <Set name="extractWAR">true</Set>
                    <Set name="copyWebDir">false</Set>
                    <Call name="addServlet">
                         <Arg>org.eclipse.jetty.servlet.DefaultServlet</Arg>
                         <Arg>/</Arg>
                    </Call>
                   <Set name="sessionHandler">
                       <New class="org.eclipse.jetty.server.session.SessionHandler">
                           <Arg>
                               <New class="com.ovea.jetty.session.redis.RedisSessionManager">
                                   <Arg>session/redis</Arg>
                                   <Arg>
                                       <New class="com.ovea.jetty.session.serializer.JsonSerializer"/>
                                   </Arg>
                                   <!-- set the interval in seconds to force session persistence event if it didn't changed. Default to 60 seconds -->
                                   <Set name="saveInterval">20</Set>
                                   <!-- set the cookie domain -->
                                   <Set name="sessionDomain">ssdev.swiftsync.com.sg</Set>
                                   <!-- set the cookie path -->
                                   <Set name="sessionPath">/</Set>
                                   <!-- set the cookie max age in seconds. Default is -1 (no max age). 1 day = 86400 seconds -->
                                   <Set name="maxCookieAge">86400</Set>
                                   <!-- set the interval in seconds to refresh the cookie max age. Default to 0. This number should be lower than the session expirity time. -->
                                   <Set name="refreshCookieAge">300</Set>
                               </New>
                           </Arg>
                       </New>
                   </Set>

               </New>
           </Item>
         </Array>
        </Set>
      </New>
    </Set>

    <!-- =========================================================== -->
    <!-- extra server options                                        -->
    <!-- =========================================================== -->
    <Set name="stopAtShutdown">true</Set>
    <Set name="stopTimeout">5000</Set>
    <Set name="dumpAfterStart"><Property name="jetty.dump.start" default="false"/></Set>
    <Set name="dumpBeforeStop"><Property name="jetty.dump.stop" default="true"/></Set>

</Configure>

 

 

准备jetty-session.xml,并且修改如下配置:

<Arg>192.168.1.12</Arg> <Arg type="int">8663</Arg>

 

<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">

<!-- =============================================================== -->
<!-- Configure the Jetty Request Log                                 -->
<!-- =============================================================== -->
<Configure id="Server" class="org.eclipse.jetty.server.Server">
    <!--
        Configure session id management
    -->
    <Set name="sessionIdManager">
        <New class="com.ovea.jetty.session.redis.RedisSessionIdManager">
            <Arg>
                <Ref id="Server"/>
            </Arg>
            <Arg>session/redis</Arg>
            <!-- time interval to check for expired sessions in redis cache, in milliseconds. Defaults to 1 min -->
            <Set name="scavengerInterval">30000</Set>
            <!-- cluster node name -->
            <Set name="workerName">
                <SystemProperty name="jetty.node" default="web1"/>
            </Set>
        </New>
    </Set>

    <!--
        Provides a Redis Pool for session management on server and each webapp
    -->
    <New class="org.eclipse.jetty.plus.jndi.Resource">
        <Arg>session/redis</Arg>
        <Arg>
            <New class="redis.clients.jedis.JedisPool">
                <Arg>
                    <New class="org.apache.commons.pool.impl.GenericObjectPool$Config">
                        <Set type="int" name="minIdle">5</Set>
                        <Set type="int" name="maxActive">15</Set>
                        <Set type="boolean" name="testOnBorrow">true</Set>
                    </New>
                </Arg>
                <Arg>192.168.1.12</Arg>
                <Arg type="int">8663</Arg>
            </New>
        </Arg>
    </New>


</Configure>

 

 

Modify jetty 启动脚本

JETTY_ARGS="lib=$JETTY_HOME/lib $APP_HOME/conf/jetty/jetty-cluster.xml $APP_HOME/conf/jetty/jetty-requestlog.xml $APP_HOME/conf/jetty/jetty-session.xml OPTIONS=jsp"

 

 

参考资料

 

https://github.com/Ovea/jetty-session-redis

原文地址:https://www.cnblogs.com/lily-tiantian/p/4806653.html