第一步,编写Interceptor实现HandlerInterceptorAdapter; 第二步,编写WebapiMvcConfig实现WebMvcConfigurerAdapter,将上面编写的Interceptor配置进去。
代码如下:
open class RequestInterceptor : HandlerInterceptorAdapter() { override fun preHandle(request: HttpServletRequest? , response: HttpServletResponse? , handler: Any?): Boolean { LOGGER.trace(" requestUri[${request?.requestURI}], clientIp[${request?.getHeader("X-Real-IP")}], handler[$handler]") val requestURI = request?.requestURI //swagger api文档 start if ((requestURI!!.contains("swagger") || requestURI.contains("api-docs") || requestURI.contains("/error") || requestURI.contains("ops") || requestURI.contains("/login"))) { return true } // request.setAttribute("sysuser_id" , "1") // return true val token = request.getHeader(SYS_ACCESS_TOKEN_TAG) LOGGER.info("login token: $token") if (StringUtils.isEmpty(token)) { throw BizException(ErrorCode.USER_NOT_LOGIN) } val uid = adminOauthRepository.getUidByAccessToken(token,Oauth2TokenPrefixType.ADMIN_USER) ?: throw BizException(ErrorCode.ACCESS_TOKEN_EXPIRED) LOGGER.info("login userid: $uid") request.setAttribute("sysuser_id" , uid) request.setAttribute("token" , token) return true } val SYS_ACCESS_TOKEN_TAG = "atoken" private val LOGGER = LoggerFactory.getLogger(RequestInterceptor::class.java) @Autowired lateinit var adminOauthRepository: AdminOauthRepository }
@Configuration open class WebapiMvcConfig : WebMvcConfigurerAdapter() { /** * 拦截用户请求 */ override fun addInterceptors(registry: InterceptorRegistry?) { registry!!.addInterceptor(requestInterceptor()) } /** * token校验 */ @Bean open fun requestInterceptor(): RequestInterceptor { return RequestInterceptor() } }