springboo自定义过滤器

本文介绍如何在SpringBoot项目中实现自定义过滤器,包括创建登录拦截器和支付频率限制器,以及如何在WebMvcConfigurer中注册这些拦截器。

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

springboo自定义过滤器
话不多说,开搞!
1.首先,设置自定义拦截器,继承HandlerInterceptorAdapter,重写preHandle方法,通过就返回出,拦截就返回false
如这个登录拦截(这里是登录的信息存在了reids中,只有登录了才会有相应的信息,没有就判定没有登录):

import com.aiwtc.pf.ticket.constant.Constant;
import com.aiwtc.pf.ticket.util.RedisUtil;
import com.aiwtc.pf.ticket.util.StringUtils;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * 前端用户登录拦截,和用户相关的资源需要登录
 * @author zeng_
 * @date 2018/12/26
 */
public class FrontLoginIntercepter extends HandlerInterceptorAdapter {

    /**
     * 限制登录用户
     * @param request request
     * @param response response
     * @param handler handler
     * @return 限制结果
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //获取缓存中的key,如果没有,则返回登录界面
        String ticketKey = (String) RedisUtil.getInstance().get(Constant.WEB_NAME, Constant.LOGIN, Constant.TICKET_KEY);
        if(StringUtils.isBlank(ticketKey)){
            response.sendRedirect(Constant.TO_LOGIN);
            return false;
        }
        //如果存在,name就是已登录,就允许进行操作,再根据需要ticketKey去缓存中获取商家信息
//        RedisUtil.getInstance().get("ticket","login",ticketKey);
        return true;
    }

}

2.注册自定义过滤器,spring项目一般是在xml文件中注册,这里springboot则是只需要实现WebMvcConfigurer,这个类,然后重写一些方法,即可完成,过滤器配置:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.nio.charset.Charset;
import java.util.List;

/**
 * WebConfigurer
 * @author zp
 */
@Configuration
public class WebConfigurer implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        //用于拦截静态资源
        registry.addResourceHandler("/api/doc/**").addResourceLocations("classpath:/swagger/dist/");
    }

    @Bean
    public HttpMessageConverter<String> responseBodyConverter() {
        return new StringHttpMessageConverter(Charset.forName("UTF-8"));
    }

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        converters.add(responseBodyConverter());
    }

    /**
     * 这个方法用来注册拦截器,我们自己写好的拦截器需要通过这里添加注册才能生效
     * @param registry 拦截器
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //拦截所有/api下的用户请求,过滤未登录用户
        registry.addInterceptor(new FrontLoginIntercepter()).addPathPatterns("/api/user/*","/admin/api/*","/admin/toIndex","/admin/merchatUpdatePass");

        //拦截所有/pay下的用户请求,每个用户每三秒只能调用一次支付接口
        registry.addInterceptor(new PayIntercepter()).addPathPatterns("/api/user/pay/*");
    }

}

3.总结,在springboot项目中,先继承HandlerInterceptorAdapter,重写preHandle方法,然后在实现,web过滤配置类。WebMvcConfigurer,再在相应的地方完成注册,写好需要过滤的请求即可!
很简单,确很必要的操作,记记!免得下次又模糊啦!哈哈!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值