Skip to content

spring boot 全局拦截器

在Spring Boot中实现统一拦截的方式是使用拦截器 Interceptor

可以创建一个自定义的拦截器来处理用户登录

创建一个实现HandlerInterceptor接口的自定义拦截器类, 例如CustomInterceptor

java
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerInterceptor;

public class CustomInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        // 在请求处理之前进行拦截
        if (!isUserLoggedIn()) {
            response.sendRedirect("/login");
            return false; // 终止请求继续处理
        }
        return HandlerInterceptor.super.preHandle(request, response, handler);
    }
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        // 请求处理之后,渲染视图之前调用
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        // 整个请求完成之后调用,可用于资源清理等操作
    }

    private boolean isUserLoggedIn() {
        // 检查用户是否已登录的逻辑
        // 返回true表示已登录,返回false表示未登录
    }
}

注册拦截器,可以在WebConfig类中进行配置

java
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import com.tao.privatecloud.interceptor.CustomInterceptor;

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new CustomInterceptor()).addPathPatterns("/**").excludePathPatterns("/login", "/init", "/error", "/favicon.ico");
    }
}