java 过滤器鉴权_SpringCloud------自定义Zuul过滤器实现登录鉴权

importcom.alibaba.fastjson.JSON;importcom.netflix.zuul.ZuulFilter;importcom.netflix.zuul.context.RequestContext;importcom.netflix.zuul.exception.ZuulException;importorg.apache.commons.lang.StringUtils;importorg.springframework.http.HttpStatus;importorg.springframework.stereotype.Component;importorg.springframework.util.AntPathMatcher;importjavax.servlet.http.HttpServletRequest;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;import staticorg.springframework.cloud.netflix.zuul.filters.support.FilterConstants.PRE_TYPE;/*** 登录过滤器*/@Componentpublic class LoginFilter extendsZuulFilter {/*** 过滤器类型,前置过滤器

*@return

*/@OverridepublicString filterType() {/*filterType:返回一个字符串代表过滤器的类型,在zuul中定义了四种不同生命周期的过滤器类型,具体如下:自定义过滤器的实现,需要继承ZuulFilter,需要重写实现下面四个方法:

pre:可以在请求被路由之前调用

routing:在路由请求时候被调用

post:在routing和error过滤器之后被调用

error:处理请求时发生错误时被调用*/

returnPRE_TYPE;

}/*** 过滤器优先级,值越小,越优先

*@return

*/@Overridepublic intfilterOrder() {return 0;

}/*** 过滤器是否生效

* true: 生效

* false: 不生效

*@return

*/@Overridepublic booleanshouldFilter() {

RequestContext context=RequestContext.getCurrentContext();

HttpServletRequest request=context.getRequest();///apigateway/order/api/v1/order/test

System.out.println(request.getRequestURI());//http://127.0.0.1:9000/apigateway/order/api/v1/order/test

System.out.println(request.getRequestURL());//ACL: 访问控制列表//不需要拦截的接口

List noFIlter = new ArrayList<>();

noFIlter.add("/apigateway/product/**");

AntPathMatcher matcher= newAntPathMatcher();for (String pattern : noFIlter) {//pattern--/user/**

if(StringUtils.isNotEmpty(pattern)&&matcher.match(pattern, request.getRequestURI())) {return false;

}

}return true;

}/*** 业务逻辑

*@return*@throwsZuulException*/@Overridepublic Object run() throwsZuulException {

System.out.println("拦截了");//jwt权限设置

RequestContext context =RequestContext.getCurrentContext();

HttpServletRequest request=context.getRequest();//token

String token = request.getHeader("token");if(StringUtils.isEmpty(token)) {

token= request.getParameter("token");

}if(StringUtils.isEmpty(token)) {

Map result = new HashMap<>();

result.put("code", 400);

result.put("msg", "拦截了,没权限...");

context.setSendZuulResponse(false);

context.setResponseStatusCode(HttpStatus.UNAUTHORIZED.value());

context.setResponseBody(JSON.toJSONString(result));//解决中文乱码

context.getResponse().setCharacterEncoding("UTF-8");

context.getResponse().setContentType("text/html;charset=UTF-8");

}return null;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值