• spring boot 配置拦截器


    首先引入web模块的依赖:

    <!-- spring boot web 组件 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <!-- spring boot web 组件 -->

    然后编写拦截器类:

    import lombok.extern.slf4j.Slf4j;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;
    import org.springframework.util.StringUtils;
    import org.springframework.web.method.HandlerMethod;
    import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
    import simple.proj.zxz.play.comm.GeneralConsts;
    import simple.proj.zxz.play.pojo.vo.comm.CommOutVO;
    import simple.proj.zxz.play.prop.CommProp;
    import simple.proj.zxz.play.utils.JsonUtil;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    
    /**
     * api访问拦截器
     *
     * @author Zxz
     * @version 1.0
     * @date Created at 2018/11/24
     **/
    
    @Slf4j
    @Component
    public class ApiAccessInterceptor extends HandlerInterceptorAdapter {
    
        @Autowired
        private CommProp commProp;
    
        /**
         * http响应类型字段
         */
        private static final String RESPONSE_CONTENT_TYPE = "Content-Type";
        /**
         * http响应类型:json
         */
        private static final String RESPONSE_HEADER_JSON = "application/json";
    
        /**
         * 访问认证拦截
         *
         * @param request  请求
         * @param response 响应
         * @param handler  数据
         * @return boolean
         * @author Zxz
         * @date 2019/10/25 17:34
         **/
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            //方法类型过滤
            if (!(handler instanceof HandlerMethod)) {
                return super.preHandle(request, response, handler);
            }
    
            //token验证
            String token = request.getHeader(GeneralConsts.REQ_HEADER_AUTH);
            if (StringUtils.isEmpty(token)) {
                //没有token信息,未登录
                response.setHeader(RESPONSE_CONTENT_TYPE, RESPONSE_HEADER_JSON);
                response.getWriter().write(JsonUtil.toFormattedJsonString(CommOutVO.getNotAuth()));
                return false;
            } else if (!auth(token)) {
                return false;
            }
    
            return super.preHandle(request, response, handler);
        }
    
        /**
         * 验证认证信息是否可以
         *
         * @param token token串
         * @return boolean
         * @author Zxz
         * @date 2019/10/25 17:48
         **/
        private boolean auth(String token) {
            return token.equals(commProp.getUserPermanentAuthorization());
        }
    
    
    }

    最后在配置类里面加入拦截器以及要拦截的路径:

    import com.alibaba.fastjson.serializer.SerializerFeature;
    import com.alibaba.fastjson.support.config.FastJsonConfig;
    import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter4;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
    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.WebMvcConfigurer;
    import simple.proj.zxz.play.interceptors.ApiAccessInterceptor;
    import simple.proj.zxz.play.prop.CommProp;
    
    /**
     * web配置
     *
     * @author zhangxz
     * 2019/10/25
     */
    @Configuration
    public class WebConfig implements WebMvcConfigurer {
    
        @Autowired
        private ApiAccessInterceptor apiAccessInterceptor;
        @Autowired
        private CommProp commProp;
    
        /**
         * 拦截器配置
         *
         * @param registry 拦截器注册类
         * @return void
         * @author Zxz
         * @date 2019/10/25 17:53
         **/
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(apiAccessInterceptor).addPathPatterns("/" + commProp.getPlayApiVersionLatest() + "/**");
    
            //注意,拦截器配置不能使用配置文件的统一api路径配置:server.servlet.context-path,这样配置是无效的。
            //只能使用controller里面的具体路径配置,才能有效拦截
    //        registry.addInterceptor(apiAccessInterceptor).addPathPatterns("/play/api/**");
    
        }
    }

    结束。

  • 相关阅读:
    SpringBoot JdbcTemplate多数据源
    SpringBoot Mybatis多数据源
    SpringBoot 配置文件2
    SpringBoot 配置文件1
    SpringBoot 日志配置
    乌镇行
    防火墙
    PL/SQL查询结果窗口太小且显示不完全
    python 列表解析
    HTML
  • 原文地址:https://www.cnblogs.com/zhangxuezhi/p/11812264.html
Copyright © 2020-2023  润新知