SpringMVC具有统一的入口DispatcherServlet,所有的请求都通过DispatcherServlet。
DispatcherServlet是前置控制器,配置在web.xml文件中的。拦截匹配的请求,Servlet拦截匹配规则要自已定义,把拦截下来的请求,依据某某规则分发到目标Controller来处理。
SpringMVC的拦截器HandlerInterceptor接口对应提供了三个preHandle,postHandle,afterCompletion方法。preHandle在业务处理器处理请求之前被调用,
postHandle在业务处理器处理请求执行完成后,生成视图之前执行,afterCompletion在DispatcherServlet完全处理完请求后被调用,可用于清理资源等。
在SpringBoot中使用拦截器首先需要实现HandlerInterceptor接口,然后将拦截器注册到MVC中,由MVC根据请求来执行不同的拦截器。
第一步:创建拦截器
package com.bjqdl.wzy.web.interceptors; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import com.bjqdl.wzy.core.ThreadLocalMap; import com.bjqdl.wzy.core.UserContext; import com.bjqdl.wzy.util.AssertUtil; import com.bjqdl.wzy.util.json.JSONUtil; import com.bjqdl.wzy.web.entity.User; import com.bjqdl.wzy.web.service.UserInfoService; import com.bjqdl.wzy.web.utils.HttpUtils; public class UserInfoInterceptor implements HandlerInterceptor{ private static final Logger logger = LoggerFactory.getLogger(UserInfoInterceptor.class); private UserInfoService userInfoService; public UserInfoInterceptor(UserInfoService userInfoService) { super(); this.userInfoService = userInfoService; } @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { logger.debug("UserInfoInterceptor.preHandle"); String openid = request.getParameter("openid"); if (request.getRequestURL().toString().contains("/user/")){ logger.debug("注册用户!"); return true; } if (!AssertUtil.isVal(openid)) { logger.error("用户信息不完整,请在url后追加用户信息 url?openid=xxxx"); return false; } if (openid.equals(UserContext.getOpenID())) { return true; } ThreadLocalMap.reset(); User user = this.userInfoService.getUser(openid); if (AssertUtil.isVal(user)) { ThreadLocalMap.put(UserContext.USER_CONTEXT, JSONUtil.parseJSON(user)); ThreadLocalMap.put(UserContext.USER_CONTEXT_IP, HttpUtils.getIpAddress(request)); return true; } else { return false; } } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { } }
第二步:注册到MVC中
自定义MVCConfig类,继承WebMvcConfigurerAdapter类,重现public void addInterceptors(InterceptorRegistry registry)方法,具体实现见代码
package com.bjqdl.wzy.web.config; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import com.bjqdl.wzy.web.interceptors.UserInfoInterceptor; import com.bjqdl.wzy.web.service.UserInfoService; @Configuration public class MVCConfig extends WebMvcConfigurerAdapter { @Autowired private UserInfoService userInfoService; /* (non-Javadoc) * @see org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter#addInterceptors(org.springframework.web.servlet.config.annotation.InterceptorRegistry) */ @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new UserInfoInterceptor(userInfoService)).addPathPatterns("/**"); super.addInterceptors(registry); } }
注意:
1、注解@Configuration是必备的;
2、addPathPatterns("/**");方法用于通知过滤器针对那些url进行拦截
相关推荐
SpringBoot 自定义拦截器 的 源代码 SpringBoot 自定义拦截器 一、自定义拦截器 二、编写控制器 三、添加拦截器对象,注入到容器的配置类中 另一种写法 四、最后application运行 我们对拦截器并不陌生,无论是 ...
项目集成了sso资源拦截的控制,自己写了一个springBoot自定义的filter。可以减少一些不必要的资源拦截。自己做的一个小demo,共享于大家。
idea软件。SpringBoot的拦截器的博客所写的例子。preHandle()方法的返回值true和false的详细区别还未描述
SpringBoot中自定义拦截器示例代码SpringBoot中自定义拦截器示例代码
springboot工程通过自定义response注解、java反射机制、自定义java拦截器、自定义功能类实现WebMvcConfigurer接口等功能,实现自定义规范化返回数据结构。
CXF3.0 Spring3.2 自定义拦截器
主要介绍了Springboot引入拦截器并放行swagger代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
内容:拦截器的使用很简单,定义一个自己的拦截器,向配置中添加一下就可以使用。...oTokenInterceptor.java 自定义拦截器 oInterceptorConfig.java 添加拦截器进入项目 oNoNeedToken.java 自定义注解
主要介绍了SpringBoot添加自定义拦截器的实现代码,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
自己整合的一个SpringBoot的Demo,告别了传统的web服务文件配置方式,实现了自定义拦截器与HTTPS请求的配置(使用Myeclipse打开,web加MAVEN型源码)
主要介绍了springboot创建拦截器过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
包含SpringBoot环境搭建、常用注解、与Mybatis整合创建多数据源的连接+Druid连接池配置、SpringBoot的热部署、SpringBoot整合Freemarker/Servlet组件/文件上传与下载、SpringBoot自定义拦截器以及将拦截器注册到容器...
包含SpringBoot环境搭建、常用注解、与Mybatis整合创建多数据源的连接+Druid连接池配置、SpringBoot的热部署、SpringBoot整合Freemarker/Servlet组件/文件上传与下载、SpringBoot自定义拦截器以及将拦截器注册到容器...
springboot自定义注解的demo;通过本案例实现了通过自定义注解的拦截的方法可以设置访问权限;通过拦截器获取指定方法上的自定义的注解,然后判断当前的接口需不要权限校验;然后通过对应的访问去处理;demo里面的代码...
SpringBoot-自定义注解AOP实现及拦截器示例代码
针对spring boot 集成jpa sql操作进行自定义分库分表逻辑
主要介绍了详解SpringBoot AOP 拦截器 Aspect,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
1.自定义拦截器 2. 静态资源被拦截 3.从过滤器中去除静态文件 4.静态文件404解决 5.补充一下 6.遗留问题现象 1.自定义拦截器 自定义XXInterceptor实现HandlerInterceptor接口,在发送请求之前拦截,所以在...
内容概要:springboot+拦截器+aop+自定义注解+本地线程实现统一接口日志记录,记录下接口所在模块、接口描述、接口请求参数、接口返回参数、接口请求时间以及接口耗时用于接口优化,接口记录参数以及操作人防止使用...
1、在SpringBoot中如何实现自定义过滤器(Filter)和拦截器(Interceptor) 2、通过执行案例了解多个过滤器和拦截器的执行顺序 【本案例包含源码以及可执行的jar文件,源码文件建议使用IDEA进行导入查看学习,建议使用...