SpringBoot 实现过滤器拦截请求,非常实用,建议收藏

需求:用户在前端登录,后端将用户信息存储在session中,通过拦截每个接口请求,判断用户是否登录,若session中存在用户信息,则放行请求,若session中不存在用户信息,则拦截请求。

Filter过滤器简介

过滤器: Filter,是 Servlet 技术中最实用的技术。

过滤器是处于客户端和服务器之间的一个过滤网,可以过滤掉一些不符合要求的请求。

常见场景:

Session 校验

判断用户权限

不符合设定条件,则会被重定向特殊的地址或者设定的响应

过滤敏感词汇

设置编码

核心过滤器代码

import javax.servlet.*;
import java.io.IOException;
import javax.servlet.http.HttpSession;
import javax.servlet.annotation.WebFilter;

import cn.hutool.core.util.ObjectUtil;
import org.apache.catalina.connector.RequestFacade;
import org.springframework.stereotype.Component;

@Component
@WebFilter(filterName = "authFilter", urlPatterns = "/*")
public class AuthFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        Filter.super.init(filterConfig);
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        String requestUri = ((RequestFacade) request).getRequestURI();
        if (requestUri.equals("/")) {
            requestUri = "/rootDir";
        }

        boolean allowedPath = requestUri.contains("assets")
                || requestUri.contains("txt")
                ||  requestUri.contains("js")
                || requestUri.contains("png")
                || requestUri.contains("ico")
                || requestUri.contains("html")
                || requestUri.contains("css")
                || requestUri.contains("/rootDir")
                || requestUri.contains("/user/login");

        if (allowedPath) {
            chain.doFilter(request, response);
        } else {
            HttpSession session = ((RequestFacade) request).getSession();
            if (ObjectUtil.isEmpty(session.getAttribute("loginUser"))) {
               request.getRequestDispatcher("/error/loginExpired").forward(request, response);
            } else {
                chain.doFilter(request, response);
            }
        }
    }

    @Override
    public void destroy() {
        Filter.super.destroy();
    }
}

路漫漫其修远兮,吾将上下而求索

译文:在追寻真理方面,前方的道路还很漫长,但我将百折不挠,不遗余力地去追求和探索。


如果您有什么好的想法与方法,欢迎在评论区留言,我们一起讨论~

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章