Spring boot中使用简单拦截器

2017-05-19  本文已影响0人  彩虹之梦

在实际开发过程中,我们的项目要给某些特定的用户来使用或者调用。在调用过程中,会让其传递某些标识,验证通过之后,才让其调用接口或者访问系统。常用的方法是在项目中加入一个拦截器,在用户调用接口之前,就验证其是否合法,做法是在header中传递一下标识,让拦截器进行处理。

简要的拦截器实现如下:

1、新建一个拦截器,让其集成HandlerInterceptorAdapter()这个类,让后实现里面的preHandle方法,也就是在请求之前拦截。

import com.fasterxml.jackson.databind.ObjectMapper
import net.tiangu.aio.commons.exception.ApiException
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.data.mongodb.core.MongoTemplate
import org.springframework.data.mongodb.core.query.Criteria
import org.springframework.data.mongodb.core.query.Query
import org.springframework.http.MediaType
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter
import javax.servlet.http.HttpServletRequest
import javax.servlet.http.HttpServletResponse

class ApiInterceptor : HandlerInterceptorAdapter() {

    @Autowired
    lateinit private var mongoTemplate: MongoTemplate

    override fun preHandle(request: HttpServletRequest, response: HttpServletResponse, handler: Any): Boolean {
        try {
            val appId = if (request.getHeader("RAINBOW-DEBUG") != "true") {
                request.getHeader("RAINBOW-APP-ID") ?: throw ApiException("0001", "参数 appId 不能为空")
            } else {
                "123456"
            }
            request.setAttribute("appId ", appId )
            return true
        } catch (ex: ApiException) {
            response.status = 400
            response.contentType = MediaType.APPLICATION_JSON_UTF8_VALUE
            val stream = response.outputStream
            stream.write(ObjectMapper().writeValueAsBytes(mapOf("code" to ex.code, "message" to (ex.message ?: "未知错误"))))
            stream.flush()
            stream.close()
            return false
        }
    }
}

2、注册拦截器。为了能够让该拦截器生效,需要注册拦截器。
新建一个ApilicationConfig,并让该类继承WebMvcConfigurerAdapter()类,并在里面实现addInterceptors方法。

import net.tiangu.aio.interceptor.ApiInterceptor
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.web.servlet.config.annotation.InterceptorRegistry
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter

/**
 * Created by rainbow on 2017/4/28.
 *一事专注,便是动人;一生坚守,便是深邃!
 */
@Configuration
open class ApplicationConfig : WebMvcConfigurerAdapter() {

    @Bean
    open fun apiInterceptor() = ApiInterceptor()

     //可注册多个拦截器
    override fun addInterceptors(registry: InterceptorRegistry) {
     //拦截/api/v1/下的所有方法
        registry.addInterceptor(apiInterceptor()).addPathPatterns("/api/v1/**")
    }
}
上一篇 下一篇

猜你喜欢

热点阅读