springboot过滤器(包含注入service)

配置类,注入过滤器UserFilter

@Configuration
public class FilterConfig {

    @Bean
    public FilterRegistrationBean<?> configFilter(){
        FilterRegistrationBean<UserFilter> filterRegistrationBean = new FilterRegistrationBean<>();
        filterRegistrationBean.setFilter(new UserFilter());
        //过滤掉全部请求
        filterRegistrationBean.addUrlPatterns("/*");

        //排除不需要过滤的请求
        Set<String> stringSet = new HashSet<>();
        stringSet.add("/api/user/login");
        String urls = StringUtils.join(stringSet.toArray(),",");
        filterRegistrationBean.addInitParameter("exclusions",urls);
        return filterRegistrationBean;
    }

}

UserFilter过滤器

public class UserFilter implements Filter {

    public static final String PARAM_NAME_EXCLUSIONS = "exclusions";
    public static final String SEPARATOR = ",";
    private Set<String> excludesUrls;

    private UserTokenService userTokenService;

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        //过滤器注入service,原因:过滤器执行的时候,service还没有被实例化注入
        ServletContext sc = filterConfig.getServletContext();
        WebApplicationContext cxt = WebApplicationContextUtils.getWebApplicationContext(sc);
        if(cxt != null) {
            if (userTokenService == null) {
                userTokenService = cxt.getBean(UserTokenService.class);
            }
        }

        String param = filterConfig.getInitParameter(PARAM_NAME_EXCLUSIONS);
        if (param != null && param.trim().length() != 0) {
            this.excludesUrls = new HashSet<>(Arrays.asList(param.split(SEPARATOR)));
        }
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest httpRequest = (HttpServletRequest) servletRequest;
        String requestURI = httpRequest.getRequestURI();
        if (!this.excludesUrls.contains(requestURI)) {
            String ticket = servletRequest.getParameter("ticket");
        }
        filterChain.doFilter(servletRequest, servletResponse);
    }

    @Override
    public void destroy() {
        log.info("UserFilter开始销毁");
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心脏dance

如果解决了您的疑惑,谢谢打赏呦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值