springboot拦截器

拦截器的底层是HandlerInterceptor 这个接口

这个接口中有三个方法:

  

 

  其中preHander 是拦截前置工作

    postHander是拦截逻辑处理完毕后的工作

    afterCompletion是页面渲染完毕后,要做的一些工作,即请求已经完成后的工作

 

我们实现一个登录拦截

  1.新建一个类,实现接口HandlerInterceptor,用来登录检查  

复制代码
package com.example.adminproject.Interceptor;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

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

/**
 * 实现拦截器的功能,拦截哪些功能
 * 将拦截器配置到容器中
 *
 * */
//一个新的注解,lombok提供的日志
@Slf4j
public class LoginInterceptor  implements HandlerInterceptor {
    /**
     *
     * @param request
     * @param response
     * @param handler
     * @return
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        log.info("拦截的请求{}",request.getRequestURI());
        //登录检查
        HttpSession session = request.getSession();
        Object loginUser = session.getAttribute("loginUser");
        if (loginUser!=null){
            return true;  //拦截放行
        }
        else {
            //拦住的话
            session.setAttribute("msg","请先登录");
            response.sendRedirect("/");
            return false;  //拦截
        }
    }

    /**
     *
     * @param request
     * @param response
     * @param handler
     * @param modelAndView
     * @throws Exception
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }

    /**
     *
     * @param request
     * @param response
     * @param handler
     * @param ex
     * @throws Exception
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

    }
}
复制代码

  2.实现了拦截器后,我们要配置到springboot容器中

   使用Configuration注解,实现WebmvcConfigurer接口中的拦截器方法

   并指定拦截规则。注意静态资源!!

复制代码
package com.example.adminproject.Config;

import com.example.adminproject.Interceptor.LoginInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class AdminWebConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginInterceptor())
                .addPathPatterns("/**")//拦截所有请求包括静态资源
                .excludePathPatterns("/","/login","/css/**","/fonts/**","/images/**","/js/**");
                //但是不拦截包括登录页面和静态资源
    }

}
复制代码

 

 


posted @   qwedfrgh  阅读(144)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示