自定义filte
前言
springboot 项目自定义filter过滤器
提示:以下是本篇文章正文内容,下面案例可供参考
一、自定义类
1.自定义OpenApiFilterConfig
代码如下(示例):
@Configuration
public class OpenApiFilterConfig {
// Filter代码类
@Bean
public OpenApiFilter openApiFilter() {
return new OpenApiFilter();
}
@Bean
public FilterRegistrationBean getFilterRegistrationBean(OpenApiFilter openApiFilter) {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.setFilter(openApiFilter);
filterRegistrationBean.setOrder(2);
filterRegistrationBean.addUrlPatterns("/openApi/*");
filterRegistrationBean.setName("OpenApiFilter");
return filterRegistrationBean;
}
}
2.自定义OpenApiFilter
代码如下(示例):
public class OpenApiFilter implements Filter {
private static final Logger log = LoggerFactory.getLogger(OpenApiFilter.class);
@Autowired
private AppInfoService appInfoService;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
log.info("init");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
log.info("doFilter");
HttpServletRequest request = (HttpServletRequest) servletRequest;
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String timestamp = request.getHeader("timestamp");
String appId = request.getHeader("appId");
String sign = request.getHeader("sign");
if (null == timestamp || timestamp.isEmpty()) {
log.error("请求头未携带时间戳");
}
//全部校验通过才放行
filterChain.doFilter(servletRequest, servletResponse);
} catch (ParseException e) {
log.error("抛出的异常", e.getMessage(), e);
e.printStackTrace();
}
}
@Override
public void destroy() {
log.info("destroy");
}
}
测试
@RestController
@RequestMapping("/openApi")
public class AppInfoController extends BaseController {
@Resource
private AppInfoService appInfoService;
@RequestMapping("/test")
public ResultBody test() {
System.out.println("我是tes");
return ResultBody.success();
}
}
总结
写的比较简洁不喜勿喷