springboot拦截器

本文介绍了如何在SpringBoot中创建并注册一个权限拦截器。通过实现HandlerInterceptor接口,重写preHandle方法进行权限校验。在拦截器中检查token参数,若不合法则返回“权限不足”的提示。拦截器注册有两种方式,一是传统的XML配置,二是使用SpringBoot的Java配置。在WebConfig类中,通过addInterceptors方法添加拦截器,并指定拦截与排除的路径。

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

(1)、编写拦截器

import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * @Author: wsn
 * @Date:2021/11/15 10:38
 * PermissionInterceptor  拦截器名称
 * (1) 创建一个类,实现接口:  HandlerInterceptor  springmvc当中提供的
 * (2) 重写接口当中的方法
 * springmvc.xml  拦截器的注册?
 * 方式一:
 * 传统方式:编写的拦截器需要在springmvc当中配置文件进行一个配置  在springboot当中可以采用这样的方式:
 * 添加一个springmvc的配置文件,在tomcat在启动的时候读取配置文件的内容,完成一个拦截器的注册
 *
 * 方式二:直接使用springboot提供的0配置,不再提供springmvc的配置文件,而是采用java的形式完成
 */
@Component   // 交给spring管理 纳入spring容器当中
public class PermissionInterceptor implements HandlerInterceptor {
    /**
     * @param request
     * @param response
     * @param handler
     * @return  false 不放行,到达不了controller;  true  放行到达从controller
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String token = request.getParameter("token");
        // 获得前端提供的参数
        if (!StringUtils.isEmpty(token)) {    // token不是null
            if ("123456".equals(token)) {
                return true;
            }
        }
        // 指定相应的字符集
        response.setContentType("text/html;charset=UTF-8");
        response.getWriter().print("权限不足");
        // 没有放行
        return false;
    }

}

(2)、对拦截器进行注册

import com.sn.springboot03.Interceptor.PermissionInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * @Author: wsn
 * @Date:2021/11/15 11:11
 * @Configuration   WebConfig添加了注释,表明类是一个配置类,相当于xml当中进行的配置
 * springboot会自动执行配置类
 */
@Configuration
public class WebConfig implements WebMvcConfigurer {
    /**
     * 重写父类当中的方法
     * @param registry
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        /**
         * 拦截请求的方法
         * 自定义的拦截器把静态资源也拦截;实际当中,静态资源要放行;
         *
         * 方式一:可以指定拦截的路径;addPathPatterns  *.do 只拦截do结尾的请求;    /** 所有的请求;   /*
         *
         * 方式二:排除哪些路径不拦截;excludePathPatterns
         */
		
        // 注册自定义的拦截器
        registry.addInterceptor(new PermissionInterceptor()).
                addPathPatterns("/**").
                excludePathPatterns("/images/**");

//        String[] addPathPatterns = { //拦截所有请求
//                "/*"
//        };
//        String[] excludePatterns = { //不拦截sayHi这个请求 【http://localhost:8080/sayHi】
//                "/sayHi"
//        };
        //如果有多个拦截器,可以继续添加
//        registry.addInterceptor(new PermissionInterceptor()).addPathPatterns(addPathPatterns).excludePathPatterns(excludePatterns);

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值