SpringBoot 入门(八)——拦截器

拦截器可以帮助我们完成一些用户状态的统一检查、请求参数的统一检查、日志的记录等,在 SpringBoot 中可以通过继承 HandlerInterceptor 来实现我们的拦截器,然后简单配置一下就可以使拦截器生效了。

一 增加拦截器

我们增加一个登录拦截器模拟对是否登录的状态统一处理:

package com.qinshou.springbootdemo.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;

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

/**
 * Description:登录拦截器
 * Author: QinHao
 * Date: 2019/8/13 14:45
 */
public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 通过请求参数中是否带有 token 来判断是否登录
        if (request.getParameter("token") == null||request.getParameter("token") .equals("")) {
            System.out.println("token is null");
            return false;
        }
        return true;
    }
}

然后修改一下之前的 ComputerController 为了后面的演示:

package com.qinshou.springbootdemo.controller;

import com.qinshou.springbootdemo.bean.ComputerBean;
import com.qinshou.springbootdemo.service.IComputerService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * Description:计算机模块的 Controller
 * Author: QinHao
 * Date: 2019/8/1 13:40
 */
@RestController
@RequestMapping(value = "/computer")
public class ComputerController {
    @Autowired
    private IComputerService mComputerService;

    @RequestMapping(value = "/selectAll", method = RequestMethod.GET)
    public List<ComputerBean> selectAll() {
        return mComputerService.selectAll();
    }

    @RequestMapping(value = "/selectAllByBrand", method = RequestMethod.GET)
    public List<ComputerBean> selectLAllByBrand(@RequestParam(name = "brand") String brand) {
        return mComputerService.selectAllByBrand(brand);
    }

    @RequestMapping(value = "/select", method = RequestMethod.GET)
    public ComputerBean select(@RequestParam(name = "id") int id) {
        return mComputerService.select(id);
    }
}

 

二 配置拦截器

写了拦截器它并不会自动生效,我们需要配置一下,在配置的时候还可以加入一些个性化配置:

package com.qinshou.springbootdemo.config;

import com.qinshou.springbootdemo.interceptor.LoginInterceptor;

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

/**
 * Description:拦截器配置类
 * Author: QinHao
 * Date: 2019/8/13 14:59
 */

@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginInterceptor())
                // 指定拦截的 url
                .addPathPatterns("/computer/**")
                // 指定不拦截的 url
                .excludePathPatterns("/computer/select");
    }
}

注意这个配置类与之前的 DruidConfig、FastJsonConfiguration 不太一样,除了加了 @Configuration 注解之外还继承了 WebMvcConfigurer 类,并重写了它的 addInterceptors 方法,从方法名就可以看出这是用来添加拦截器的,我们在这个方法中添加刚才的 LoginInterceptor,并指定了一些过滤规则。

 

四 测试

按照上面的规则,我们会过滤所有 /computer/ 开头的请求,除了 /computer/select 之外的 url,不带 token 参数的话都会被拦截,测试 selectAll:

可以看到页面上并没有返回任何内容,后台也打印出了错误,然后测试 selectAllByBrand:

同样的结果,然后再测试 selectAllByBrand 加上 token 参数和 select 不加 token 参数:

页面上返回了内容,后台打印中也执行了 SQL,说明我们的个性化配置是生效了,拦截器完美的完成了它的使命。在开发中拦截器是很有用的,可以帮我们完成很多需要统一处理的工作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值