使用tomcat-redis-session-manager进行统一session管理

下载开源项目

开源项目地址:https://github.com/jcoleman/tomcat-redis-session-manager
下载下来,把src的代码放到自己新建的项目中,注意:对应服务器tomcat版本,这个项目编译要对应修改。本文服务器tomcat8。tomcat7参考下文。https://blog.csdn.net/lzc409973859/article/details/51981079

pom.xml

<dependencies>
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-catalina</artifactId>
            <version>8.0.33</version>
        </dependency>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.7.2</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin> <!-- 打jar包 -->
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.0</version>
                <configuration>
                    <!-- 源代码编译版本 -->
                    <source>1.8</source>
                    <!-- 目标平台编译版本 -->
                    <target>1.8</target>
                    <!-- 字符集编码 -->
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>

和在tomcat7配置在jdk版本上有点不同。

RedisSessionManager需要修改一个地方

不然会报如下错误:

Caused by: java.lang.NoSuchMethodError: org.apache.catalina.Container.getLoader()Lorg/apache/catalina/Loader;
at com.orangefunction.tomcat.redissessions.RedisSessionManager.initializeSerializer(RedisSessionManager.java:716)
at com.orangefunction.tomcat.redissessions.RedisSessionManager.startInternal(RedisSessionManager.java:295)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
… 12 more

修改
这里写图片描述

这里写图片描述

打jar包

打包为:tomcat-redis-session-manager-0.0.1-SNAPSHOT.jar
同时把:jedis-2.7.2.jar、commons-pool2-2.0.jar 这3个放到服务器tomcat8 lib目录下。使用maven命令:mvn dependency copy-dependencies 从该项目中导出依赖到target/dependency下
这里写图片描述

修改conf/context.xml

<Context>

    <!-- Default set of monitored resources. If one of these changes, the    -->
    <!-- web application will be reloaded.                                   -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>

    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
    <!--
    <Manager pathname="" />
    -->

    <!-- Uncomment this to enable Comet connection tacking (provides events
         on session expiration as well as webapp lifecycle) -->
    <!--
    <Valve className="org.apache.catalina.valves.CometConnectionManagerValve" />
    -->
  <!-- tomcat-redis-session共享配置 -->  
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />  
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"  
    host="193.112.76.19"  
    port="6379"  
    database="0"
    password="你的密码"  
    maxInactiveInterval="60" />
</Context>

验证

建立一个demo

  • controller
@Controller
public class Test {
    @RequestMapping("/test")
    public String test(HttpSession session, HttpServletRequest request) {
        request.setAttribute("id", session.getId());
        return "index";
    }

}
  • jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://"
            + request.getServerName() + ":" + request.getServerPort()
            + path + "/";
%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%-- <%@ page isELIgnored ="false" %>   --%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>My JSP 'TestUpload.jsp' starting page</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head>

<body>
我的session:${id}
    <br> sessionid=<%=session.getId()%>

</body>
</html>

没使用tomcat-redis-session-manager前,每次访问页面的sessionId都会发生变化。加入配置后,就不变了,同时使用客户端工具连接redis查看里面也会生成一个记录。
注意:

  1. 同时网上说不设密码会报错(未校验):NOAUTH Authentication required.
  2. 需要特别注意的是项目中要存入session的对象必须实现序列化,否知会出现序列化错误

猜你喜欢

转载自blog.csdn.net/qq_35830949/article/details/79996360