美文网首页
Spring boot中使用简单拦截器

Spring boot中使用简单拦截器

作者: 彩虹之梦 | 来源:发表于2017-05-19 16:13 被阅读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/**")
        }
    }
    

    相关文章

      网友评论

          本文标题:Spring boot中使用简单拦截器

          本文链接:https://www.haomeiwen.com/subject/upvyxxtx.html