总结:

1.用注解的话,第一次写接口时 需要增加很多注解,但是也是很方便,复制粘贴就可。后期维护灵活度非常大。

2.用写死的方式的话,拦截器越多,后期维护难度越大,针对/abc接口,可能 a拦截器排除,b拦截器也排除,c拦截器来拦截,那么需要写多次,后期及难维护。举例如下:

/**
 * 拼多多接口的拦截器配置
 * 1.token
 * 2.shopid
 */
@Configuration
public class PinduoduoWebMvcConfigurer_back extends CommonWebMvcConfigurer {

    @Autowired
    VerifyRsaTokenInterceptor verifyRsaTokenInterceptor;

    @Autowired
    VerifyShopIdInterceptor verifyShopIdInterceptor;

    @Autowired
    VerifyAesTokenInterceptor verifyAesTokenInterceptor;


    /**
     * 将拦截器注册到此项目中.
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {

        /*
         1.验证token
         */
        registry.addInterceptor(verifyRsaTokenInterceptor).addPathPatterns("/**")
                .excludePathPatterns("/buildToken") //这里需要写多次,拦截器越多,重复写的次数越多,后期越难维护
                .excludePathPatterns("/importShopId")
                .excludePathPatterns("/PinduoduoShopStatusGet")
                .excludePathPatterns("/slb.html")

                /*
                 1.TaobaoJushitaJdpUsersGet 需要这个来统计活跃度。这个接口需要的安全度不高,delphi和guanli模块都有调用,完全开放。
                 2.TaobaoJushitaJdpUserDelete 需要用这个来定时关闭 数据推送,不可拦截。用下面的Aes128拦截器拦截。
                 */
                .excludePathPatterns("/PddDdyPdpUsersGet")
                .excludePathPatterns("/PddDdyPdpUserDelete")

                .order(1);


        /*
         2.验证shopId
         */
        registry.addInterceptor(verifyShopIdInterceptor).addPathPatterns("/**")
                .excludePathPatterns("/buildToken")
                .excludePathPatterns("/importShopId")
                .excludePathPatterns("/PinduoduoShopStatusGet")
                .excludePathPatterns("/slb.html")

                /*
                 1.TaobaoJushitaJdpUsersGet 需要这个来统计活跃度。这个接口需要的安全度不高,delphi和guanli模块都有调用,完全开放。
                 2.TaobaoJushitaJdpUserDelete  需要用这个来定时关闭 数据推送,不可拦截。用下面的Aes128拦截器拦截。
                 */
                .excludePathPatterns("/PddDdyPdpUsersGet")
                .excludePathPatterns("/PddDdyPdpUserDelete")

                .order(2);


        /*
         3.有一些接口,无法验证颁发的token,为了安全,避免接口完全开放,
           这类接口利用对称秘钥,验证固定字符串,只增加需要拦截的。多数不需要这个拦截器拦截。
           TaobaoJushitaJdpUserDelete -- 场景为,需要 guanli 模块定时调用,其它模块基本用不到。
         */
        registry.addInterceptor(verifyAesTokenInterceptor).addPathPatterns("/PddDdyPdpUserDelete").order(3);
    }

 

 

 

@Configuration
public class TaobaoWebMvcConfigurer extends CommonWebMvcConfigurer {

    @Autowired
    VerifyRsaTokenInterceptor verifyRsaTokenInterceptor;

    @Autowired
    VerifyShopIdInterceptor verifyShopIdInterceptor;

    @Autowired
    VerifyAesTokenInterceptor verifyAesTokenInterceptor;

    /**
     * 将拦截器注册到此项目中.
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {

        /*
         1.验证token
         */
        registry.addInterceptor(verifyRsaTokenInterceptor).addPathPatterns("/**")
                .excludePathPatterns("/buildToken")
                .excludePathPatterns("/importShopId")
                .excludePathPatterns("/TaobaoShopStatusGet")
                .excludePathPatterns("/slb.html")

                /*
                 1.TaobaoJushitaJdpUsersGet 需要这个来统计活跃度。这个接口需要的安全度不高,delphi和guanli模块都有调用,完全开放。
                 2.TaobaoJushitaJdpUserDelete 需要用这个来定时关闭 数据推送,不可拦截。用下面的Aes128拦截器拦截。
                 */
                .excludePathPatterns("/TaobaoJushitaJdpUsersGet")
                .excludePathPatterns("/TaobaoJushitaJdpUserDelete")


                /*
                 御城河日志的,这个比较特殊,因为登录前,登录失败的需要对接日志,而此时并没有http协议头的token。所以这个接口放行。
                 */
                .excludePathPatterns("/YchLogLogin")
                .order(1);


        /*
         2.验证shopId
         */
        registry.addInterceptor(verifyShopIdInterceptor).addPathPatterns("/**")
                .excludePathPatterns("/buildToken")
                .excludePathPatterns("/importShopId")
                .excludePathPatterns("/TaobaoShopStatusGet")
                .excludePathPatterns("/slb.html")

                /*
                 1.TaobaoJushitaJdpUsersGet 需要这个来统计活跃度。这个接口需要的安全度不高,delphi和guanli模块都有调用,完全开放。
                 2.TaobaoJushitaJdpUserDelete  需要用这个来定时关闭 数据推送,不可拦截。用下面的Aes128拦截器拦截。
                 */
                .excludePathPatterns("/TaobaoJushitaJdpUsersGet")
                .excludePathPatterns("/TaobaoJushitaJdpUserDelete")


                /*
                 御城河日志相关的5个接口,不做shopId校验,让这5个接口通过。
                 */
                .excludePathPatterns("/YchLogTop")
                .excludePathPatterns("/YchLogSql")
                .excludePathPatterns("/YchLogLogin")
                .excludePathPatterns("/YchLogOrder")
                .excludePathPatterns("/YchLogSendOrder")
                .order(2);


        /*
         3.有一些接口,无法验证颁发的token,为了安全,避免接口完全开放,
           这类接口利用对称秘钥,验证固定字符串,只增加需要拦截的。多数不需要这个拦截器拦截。
           TaobaoJushitaJdpUserDelete -- 场景为,需要 guanli 模块定时调用,其它模块基本用不到。
         */
        registry.addInterceptor(verifyAesTokenInterceptor).addPathPatterns("/TaobaoJushitaJdpUserDelete").order(3);
    }
}

 

posted on 2020-06-20 15:59  del88  阅读(357)  评论(0编辑  收藏  举报