springboot拦截器

本文介绍如何在 SpringBoot 中实现用户登录状态检查的拦截器。通过创建 HandlerInterceptor 接口的实现类和 WebMvcConfigurer 接口的配置类,详细展示了拦截指定 URL 的过程,以及如何排除无需验证的路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

springboot的拦截器的注册还是比较方便的主要还是分为两部分:

1、实现HandlerInterceptor接口创建拦截器

2、实现WebMvcConfigurer接口配置拦截器

一下使用一个简单的例子还是说明其用法,就拿登录后才可以访问某一些页面来讲

1、创建拦截器,实现HandlerInterceptor接口

public class UserInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //在这个方法中实现逻辑
        //判断是否登录,在session中获取user
        User user = (User) request.getSession().getAttribute("User");
        if(user == null){
            //没登录就跳到登录页面
            response.sendRedirect(request.getContextPath()+"/user/error");
//            response.sendRedirect(request.getContextPath()+"/templates/login.html");
            return false;
        }
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println(11111);
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println(22222);
    }
}

2、配置拦截器 

@Configuration //定义此类为配置类
public class UserConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //需要拦截的路径
        //拦截user下所有的路径,必须登录在可以访问
        String [] addPathPatterns ={
            "/user/**"
        };
        //需要放行的路径
        //不需要登录的,也可以访问
        String [] excludePathPatterns ={
            "/user/out","/user/error","/user/login"
        };
        registry.addInterceptor(new UserInterceptor()).addPathPatterns(addPathPatterns).excludePathPatterns(excludePathPatterns);
    }
}

就是在上面,我们可以不需要登录就可以访问,/user/out, /user/error,/user/login,只要当登录之后才可以访问/user/center,不然就被拦截,访问/user/error了

@Controller
@RequestMapping("/user")
public class UserController {

    @RequestMapping("/login")
    public @ResponseBody Object login(HttpServletRequest request){
        User user = new User();
        user.setName("zhangsan");
        user.setSex("男");
        user.setPassword(123456);
        request.getSession().setAttribute("User",user);
        return "success";
    }

    @RequestMapping("/center")
    public @ResponseBody Object center(){
        return "center";
    }

    @RequestMapping("/out")
    public @ResponseBody Object Out(){
        return "out";
    }
    @RequestMapping("/error")
    public @ResponseBody Object Error(){
        return "error";
    }
}

注意点:

拦截器中方法的执行顺序是 preHandle -> Controller -> postHandle -> afterCompletion
只有preHandle返回true,才会执行后面的方法 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值