zoukankan      html  css  js  c++  java
  • spring session实现同域下单点登录

    Session会话管理

      在Web项目开发中,Session会话管理是一个很重要的部分,用于存储与记录用户的状态或相关的数据;通常情况下session交由容器(tomcat)来负责存储和管理,但是如果项目部署在多台tomcat中,则session管理存在很大的问题;1、多台tomcat之间无法共享session,比如用户在tomcat A服务器上已经登录了,但当负载均衡跳转到tomcat B时,由于tomcat B服务器并没有用户的登录信息,session就失效了,用户就退出了登录;2、一旦tomcat容器关闭或重启也会导致session会话失效;因此如果项目部署在多台tomcat中,就需要解决session共享的问题;

    配置文件

    1 pom.xml
    <dependency>
        <groupId>org.springframework.session</groupId>
        <artifactId>spring-session-data-redis</artifactId>
        <version>1.3.1.RELEASE</version>
    </dependency>
    
    2 web.xml
      <filter>
            <filter-name>springSessionRepositoryFilter</filter-name>
            <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>springSessionRepositoryFilter</filter-name>
            <url-pattern>*.do</url-pattern>
        </filter-mapping>
    
      <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>
                classpath:applicationContext.xml
            </param-value>
        </context-param>
    
    3 applicationContext.xml
        <context:annotation-config/>
        <!-- 初始化一切spring-session准备,且把springSessionFilter放入IOC  -->
        <bean id="redisHttpSessionConfiguration" class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration">
            <property name="maxInactiveIntervalInSeconds" value="300"/>
        </bean>
      <!-- 配置cookie信息-->
        <bean class="org.springframework.session.web.http.DefaultCookieSerializer" id="defaultCookieSerializer">
            <property name="cookieName" value="SESSION_NAME"/>
            <property name="domainName" value="wangjun.com"/>
            <property name="useHttpOnlyCookie" value="true"/>
            <property name="cookiePath" value="/"/>
            <property name="cookieMaxAge" value="31536000"/>
        </bean>
      <!-- 配置redis连接池信息-->  
        <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
            <property name="maxTotal" value="20"/>
        </bean>
      <!--配置redis连接信息-->
        <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
            <property name="hostName" value="127.0.0.1"/>
            <property name="port" value="6379"/>
            <property name="poolConfig" ref="jedisPoolConfig"/>
        </bean>

    代码测试

    public class SessionServlet extends HttpServlet {
     
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            this.doGet(request,response);
        }
     
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            String sesssionID = request.getSession().getId();
            //部署两份,把这个地方8081改成8080就行了,只是为了区分
            response.getWriter().write("8081 Server SessionID"+sesssionID);
        }
    }
  • 相关阅读:
    django class类即视图类添加装饰器的几种方法
    django 如何在HMTL中使用媒体media_url
    django 对models中上传的文件或图片改名
    常用工具链接网址
    verifycode验证码模版
    shell 一些常用命令
    用 openresty 编写 lua
    centos7 安装python虚拟环境
    django url配置-反向解析-视图函数-HttpRequest对象-HttpResponse对象-cookies-session-redis缓存session
    PWN题搭建
  • 原文地址:https://www.cnblogs.com/FondWang/p/11711468.html
Copyright © 2011-2022 走看看