springcloud中各module的拦截器

springboot中提供了一个非常便捷的拦截器:HandlerInterceptorAdapter

第一步:我们只需要新建一个拦截类实现HandlerInterceptorAdapter,实现preHandle方法,preHandle方法里面就需要写一些拦截的机制

public class ServiceManageRestInterceptorextends HandlerInterceptorAdapter{

private Loggerlogger = LoggerFactory.getLogger(ServiceManageRestInterceptor.class);

@Autowired

    private JWTUtiljwtUtil;

@Value("${token-header}")

private StringtokenHeader;

private ListallowedClient;

@Override

    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {

HandlerMethod handlerMethod = (HandlerMethod) handler;

//        // 配置该注解,说明不进行服务拦截

//        IgnoreClientToken annotation = handlerMethod.getBeanType().getAnnotation(IgnoreClientToken.class);

//        if (annotation == null) {

//            annotation = handlerMethod.getMethodAnnotation(IgnoreClientToken.class);

//        }

//        if(annotation!=null) {

//            return super.preHandle(request, response, handler);

//        }

//        String token = request.getHeader(serviceAuthConfig.getTokenHeader());

//        IJWTInfo infoFromToken = serviceAuthUtil.getInfoFromToken(token);

//        String uniqueName = infoFromToken.getUniqueName();

//        for(String client:serviceAuthUtil.getAllowedClient()){

//            if(client.equals(uniqueName)){

//                return super.preHandle(request, response, handler);

//            }

//        }

        throw new ClientForbiddenException("Client is Forbidden!");

}

}

注意上面这个子类不需要进行@Component /@Configuration的配置

第二步:我们需要写一个配置类来吧这个拦截器配置到spring中,这个配置类需要实现WebMvcConfigurer

@Configuration("schoolManageWebConfig")

@Primary

public class WebConfigurationimplements WebMvcConfigurer {

@Bean

    GlobalExceptionHandler getGlobalExceptionHandler() {

return new GlobalExceptionHandler();

}

@Override

    public void addInterceptors(InterceptorRegistry registry) {

registry.addInterceptor(getServiceManageRestInterceptor()).

addPathPatterns(getIncludePathPatterns());

}

@Bean

    ServiceManageRestInterceptor getServiceManageRestInterceptor() {

return new ServiceManageRestInterceptor();

}

/**

* 需要用户和服务认证判断的路径

    * @return

    */

    private ArrayList getIncludePathPatterns() {

ArrayList list =new ArrayList<>();

String[] urls = {

"/**"

    };

Collections.addAll(list, urls);

return list;

}

}

这个配置类中registry.addInterceptor(getServiceManageRestInterceptor())这一步就把我们刚才新建的拦截器加入到了spring管理中。getIncludePathPatterns方法我们自定义了一些拦截的方法名的规则。

这样一个module的拦截器就实现了,这个拦截器里面主要就是检查用户token的状态。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,680评论 19 139
  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong阅读 22,966评论 1 92
  • 对于java中的思考的方向,1必须要看前端的页面,对于前端的页面基本的逻辑,如果能理解最好,不理解也要知道几点。 ...
    神尤鲁道夫阅读 904评论 0 0
  • 步高里的斜对面有一条小弄堂,一不小心你就会错过。狭窄的路上有蔬菜摊和水果摊,穿越这里竟是另一个天地,在这里洋腔洋调...
    设计狮妈咪阅读 444评论 0 2
  • 货币需求变化与经济结构 经济增长的结构乡变化影响货币需求 货币需求的稳定性: 中央银行宏观调控经济的一个重要先决条...
    咔辣辣阅读 247评论 0 0

友情链接更多精彩内容