首页 > 开发 > Java > 正文

spring boot实现过滤器和拦截器demo

2024-07-13 10:04:38
字体:
来源:转载
供稿:网友

整理文档,搜刮出一个spring boot实现过滤器和拦截器demo ,稍微整理精简一下做下分享。

拦截器定义:

@WebServletpublic class ActionInterceptor implements HandlerInterceptor {  @Override  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)      throws Exception {    // System.out.println(">>>MyInterceptor1>>>>>>>在请求处理之前进行调用(Controller方法调用之前)");    // 获取系统时间    Calendar ca = Calendar.getInstance();    int hour = ca.get(Calendar.HOUR_OF_DAY);    // 设置限制运行时间 0-4点    if (hour < 4) {      return true;    }    return false;  }  @Override  public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,      ModelAndView modelAndView) throws Exception {    // System.out.println(">>>MyInterceptor1>>>>>>>请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)");  }  @Override  public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)      throws Exception {    // System.out.println(">>>MyInterceptor1>>>>>>>在整个请求结束之后被调用,也就是在DispatcherServlet    // 渲染了对应的视图之后执行(主要是用于进行资源清理工作)");  }}

拦截器使用:  关于注解 我使用的是@Component  其实也可能声明成配置

@Componentpublic class ApplicationConfig {extends WebMvcConfigurerAdapter   @Override  public void addInterceptors(InterceptorRegistry registry) {    // 多个拦截器组成一个拦截器链    // addPathPatterns 用于添加拦截规则    // excludePathPatterns 用户排除拦截    registry.addInterceptor(new ActionInterceptor()).addPathPatterns("/service/extract/json/**");    super.addInterceptors(registry);  }}

过滤器:

定义:

public class ActionFilter implements Filter {  @Override  public void init(FilterConfig filterConfig) throws ServletException {  }  @Override  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)      throws IOException, ServletException {    // 获取系统时间    Calendar ca = Calendar.getInstance();    int hour = ca.get(Calendar.HOUR_OF_DAY);    // 设置限制运行时间 0-4点    if (hour < 4) {      HttpServletResponse httpResponse = (HttpServletResponse) response;      httpResponse.setCharacterEncoding("UTF-8");      httpResponse.setContentType("application/json; charset=utf-8");            // 消息      Map<String, Object> messageMap = new HashMap<>();      messageMap.put("status", "1");      messageMap.put("message", "此接口可以请求时间为:0-4点");      ObjectMapper objectMapper=new ObjectMapper();      String writeValueAsString = objectMapper.writeValueAsString(messageMap);      response.getWriter().write(writeValueAsString);          } else {      chain.doFilter(request, response);    }  }  @Override  public void destroy() {  }}

使用:

@Componentpublic class ApplicationConfig {   @Bean  public FilterRegistrationBean filterRegistrationBean() {    FilterRegistrationBean registrationBean = new FilterRegistrationBean();    ActionFilter actionFilter = new ActionFilter();    registrationBean.setFilter(actionFilter);    List<String> urlPatterns = new ArrayList<String>();    urlPatterns.add("/service/extract/json/*");    registrationBean.setUrlPatterns(urlPatterns);    return registrationBean;  }  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持VeVb武林网。


注:相关教程知识阅读请移步到JAVA教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表