springboot项目中简单的拦截器

自定义一个拦截器,拦截指定路径的请求
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

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

/**
 * @Datetime 2024年12月25日 16:39
 * @ClassName: UserDeptInfoInterceptor
 * @Description: TODO 拦截器
 * @Version 1.0
 */
@Slf4j
@Component
@CrossOrigin
public class UserDeptInfoInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request,HttpServletResponse response,Object handler) throws Exception{
           log.info("在请求处理之前进行调用(即 Controller 方法执行之前)");
           log.info("检查用户的登录状态、权限检查、请求日志等");

        //允许跨域
        response.setHeader("Access-Control-Allow-Origin", request.getHeader("origin"));
        //该字段可选,是个布尔值,表示是否可以携带cookie
        response.setHeader("Access-Control-Allow-Credentials", "true");
        //允许的请求方法
        response.setHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT,PATCH, DELETE, OPTIONS");
        //允许header携带
        response.setHeader("Access-Control-Allow-Headers", "*");


           // 权限检查或日志记录
           if (request.getSession().getAttribute("user") == null) {
            response.sendRedirect("/login");
            return false;
        }
           return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response,Object handler, ModelAndView modelAndView) throws Exception{
        //
        log.info("可以在这里修改模型数据");
        if (modelAndView != null) {
            modelAndView.addObject("additionalInfo", "some additional data");
        }
    }


    @Override
    public void afterCompletion(HttpServletRequest request,HttpServletResponse response, Object handler,Exception ex)throws Exception{
        // 执行清理工作,记录日志,统计请求耗时等
        long endTime = System.currentTimeMillis();
        log.info("方法结束时间{}",endTime);
    }
}
如果我们要使用这个拦截器的话 还需要将它注册到SpringMVC的配置中
import com.rococo.config.interceptor.UserDeptInfoInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * @Datetime 2024年12月25日 17:19
 * @ClassName: WebConfig
 * @Description: TODO web配置类,用于注册自定义的拦截器
 * @Version 1.0
 */
@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Autowired
    UserDeptInfoInterceptor userDeptInfoInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry){
        registry.addInterceptor(userDeptInfoInterceptor)
                .addPathPatterns("/api/**")    //拦截/api/开头的请求
                .excludePathPatterns("/acc/**");   //开放/acc/开头的请求
    }


    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.
                addResourceHandler("/swagger-ui/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/")
                .resourceChain(false);
    }
}
关于 Swagger 配置:

addResourceHandlers 方法中,为 /swagger-ui/** 配置了静态资源处理规则

这个配置确保了请求路径 /swagger-ui/** 会直接被 Spring MVC 处理为静态资源请求,不会受到 userDeptInfoInteceptor 拦截器的干扰。所以即使请求路径不是 /api/** 开头的,也不会影响访问 Swagger UI 资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值