以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()方法中完成。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/10453.html