使用Spring+redis实现对session的分布式管理

本文介绍如何在Spring中利用redis实现分布式session管理,通过配置web.xml和编写拦截器,利用DistributedSessionFilter、DistributedSessionManager等类,将session持久化到redis,以支持集群扩展和session独立于服务器。
摘要由CSDN通过智能技术生成

在Spring中实现分布式 session管理

本文主要是在Spring中实现分布式session,采用redis对session进行持久化管理,这样当应用部署的时候,不需要在Resin、Tomcat等容器里面进行分布式配置,方便加入新的节点服务器进行集群扩容,session不依赖各节点的服务器,可直接从redis获取。下面是功能的核心代码:

一、首先在web.xml里面配置

加入拦截器:

<!-- 分布式session start -->
    <filter>
        <filter-name>distributedSessionFilter</filter-name>
        <filter-class>DistributedSessionFilter</filter-class>
        <init-param>
            <!-- 必填,密钥.2种方式,1对应为bean,格式为bean:key。2字符串,格式如:afffrfgv-->
            <param-name>key</param-name>
            <param-value>xxxxxxxx</param-value>
        </init-param>
        <init-param>
            <!-- 必填,redis对应的bean,格式为bean:xx-->
            <param-name>cacheBean</param-name>
            <param-value>bean:redisPersistent</param-value>//DistributedBaseInterFace,对应于此接口,进行session的持久化操作
        </init-param>
        <init-param>
            <!-- 必填, -->
            <param-name>cookieName</param-name>
            <param-value>TESTSESSIONID</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>distributedSessionFilter</filter-name>
        <url-pattern>*.do</url-pattern>
    </filter-mapping>
    <!-- 分布式session end -->

二、拦截器的实现,核心代码如下

主要有以下的几个类:
DistributedSessionFilter,
DistributedSessionManager,
DistributedHttpSessionWrapper,
DistributedHttpServletRequestWrapper

1、DistributedSessionFilter实现Filter:

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

public class DistributedSessionFilter implements Filter {
   
    private static final Logger log = LoggerFactory.getLogger(DistributedSessionFilter.class);

    private String cookieName;

    //主要是对session进行管理的操作
    private DistributedSessionManager distributedSessionManager;

    private String key;
}

容器启动时候的初始化方法:

@Override
    public void init(FilterConfig config) throws ServletException {
        WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(config
                .getServletContext());
        String key = config.getInitParameter("key");
        String cookieName = config.getInitParameter("cookieName");
        String cacheBean = config.getInitParameter("cacheBean");
        // 获取bean的名称,配置是"bean:"
        String redisBeanStr = cacheBean.substring(5);
        DistributedBaseInterFace distributedCache = (DistributedBaseInterFace) wac.getBean(redisBeanStr);

        // 获取key,有2种配置方式,1对应为bean,格式为bean:key。2字符串
        if (key.startsWith("bean:")) {
            this.key = (Strin
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值