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

网友投稿 205 2023-06-08


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

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

拦截器定义:

@WebServlet

public class ActionInterceptor implements HandlerInterceptor {

@Override

public boolean preHandle(HttpServletRequest http://request, HttpServletResponse response, Object handler)

http://throws Exception {

// System.out.println(">>>MyInterceptor1>>>>>>>在请求处理之前进行调用(Controller方法调用之前)"http://);

// 获取系统时间

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  其实也可能声明成配置

@Component

public 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 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() {

}

}

使用:

@Component

public class ApplicationConfig {

@Bean

public FilterRegistrationBean filterRegistrationBean() {

FilterRegistrahttp://tionBean registrationBean = new FilterRegistrationBean();

ActionFilter actionFilter = new ActionFilter();

registrationBean.setFilter(ahttp://ctionFilter);

List urlPatterns = new ArrayList();

urlPatterns.add("/service/extract/json/*");

registrationBean.setUrlPatterns(urlPatterns);

return registrationBean;

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:微信小程序 两种为对象属性赋值的方式详解
下一篇:微信小程序 开发之顶部导航栏实例代码
相关文章

 发表评论

暂时没有评论,来抢沙发吧~