使用spring-session-data-redis管理session,过滤静态文件

3 篇文章 0 订阅

在分布式系统中,如果想要集中存储会话状态,一般会用到redis来存储会话,但是使用spring-session-data-redis时,会把所有请求都去访问redis,包括静态资源文件,解决方法是加一个过滤器判断,从而绕过session filter

如:所有以/static/开头的url,都绕过session filter,从而不去访问session

import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.annotation.Order;
import org.springframework.session.web.http.SessionRepositoryFilter;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@Component
@Order(SessionRepositoryFilter.DEFAULT_ORDER - 1)
public class ExcludeUrlFilter extends OncePerRequestFilter {

    /**
     * 多个url以逗号分割 例如:/static/js,/css/
     */
    @Value("${spring.session.exclude.url}")
    private String url;

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
            throws ServletException, IOException {
        boolean flag = excludeUrl(request.getRequestURI(), url);
        if(flag) {
            request.setAttribute("org.springframework.session.web.http.SessionRepositoryFilter.FILTERED", Boolean.TRUE);
        }
        filterChain.doFilter(request, response);
    }

    private boolean excludeUrl(String requestURI, String url) {
        String[] uri = url.split(",");
        for(String str:uri){
            if(requestURI.startsWith(str)){
                return true;
            }
        }
        return false;
    }

}

   Spring系列.@EnableRedisHttpSession原理简析 - 程序员自由之路 - 博客园

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值