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

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

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

在分布式系统中,如果想要集中存储会话状态,一般会用到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 {

    
    @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原理简析 - 程序员自由之路 - 博客园

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5434322.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存