18 基于Spring Cloud Zuul的接口鉴权实现

导读:本篇文章讲解 18 基于Spring Cloud Zuul的接口鉴权实现,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

以RBAC权限管理体系为例,在Zuul的拦截器中基于访问URI可以实现用户的权限鉴别需求;鉴权拦截器示例如下所示:

@Component
public class AuthUserFilter extends ZuulFilter {
    @Override
    public String filterType() {
        return PRE_TYPE; // 定义过滤器类型:前置过滤器
    }

    @Override
    public int filterOrder() {
        return PRE_DECORATION_FILTER_ORDER - 1; // 定义过滤器顺序:比优先级最高的Filter还要优先执行
    }

    @Override
    public boolean shouldFilter() {
        // 根据URI判断是否启用该过滤器
        RequestContext requestContext = RequestContext.getCurrentContext();
        HttpServletRequest request = requestContext.getRequest();
        // 这里的鉴权逻辑,在实际项目中应该查询数据库或者缓存来实现,建议采用Redis缓存方式
        if (request.getRequestURI().startsWith("/ms-goods/goods/comment")) {
            return true; // 访问专属User会员的接口地址时,启用过滤器
        }
        return false;
    }

    @Override
    public Object run() throws ZuulException {
        // 在shouldFilter()鉴权,在run()实现鉴权后的一些逻辑,比如缓存会员中心的订单、收藏、评论等数据
        RequestContext requestContext = RequestContext.getCurrentContext();
        HttpServletRequest request = requestContext.getRequest();
        Cookie[] cookies = request.getCookies();
        String openid = null;
        for (Cookie cookie:cookies) {
            switch (cookie.getName()){
                case "openid":
                    openid = cookie.getValue();
                    break;
                default:
                    break;
            }
        }
        return null;
    }
}

AuthUserFilter是一个前置过滤器,执行顺序定义在限流拦截器之后,鉴权业务在shouldFilter()方法中完成,鉴权的后置业务(如缓存会员个人数据等)在run()方法中完成。

18 基于Spring Cloud Zuul的接口鉴权实现

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/10453.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!