使用 zuul权限校验
2019-05-22 本文已影响0人
Pts
- 全新校验拦截器
/**
* 登录过滤器
*记得类上加Component注解
*/
@Component
public class LoginFilter extends ZuulFilter {
/**
* 过滤器类型,前置过滤器
*/
@Override
public String filterType() {
return PRE_TYPE;
}
/**
* 过滤器顺序,越小越先执行
*/
@Override
public int filterOrder() {
return 4;
}
/**
* 过滤器是否生效
* 返回true代表需要权限校验,false代表不需要用户校验即可访问
*/
@Override
public boolean shouldFilter() {
//共享RequestContext,上下文对象
RequestContext requestContext = RequestContext.getCurrentContext();
HttpServletRequest request = requestContext.getRequest();
System.out.println(request.getRequestURI());
//需要权限校验URL
if ("/apigateway/order/api/v1/order/save".equalsIgnoreCase(request.getRequestURI())) {
return true;
} else if ("/apigateway/order/api/v1/order/list".equalsIgnoreCase(request.getRequestURI())) {
return true;
} else if ("/apigateway/order/api/v1/order/find".equalsIgnoreCase(request.getRequestURI())) {
return true;
}
return false;
}
/**
* 业务逻辑
* 只有上面返回true的时候,才会进入到该方法
*/
@Override
public Object run() throws ZuulException {
//JWT
RequestContext requestContext = RequestContext.getCurrentContext();
HttpServletRequest request = requestContext.getRequest();
//token对象,有可能在请求头传递过来,也有可能是通过参数传过来,实际开发一般都是请求头方式
String token = request.getHeader("token");
if (StringUtils.isBlank((token))) {
token = request.getParameter("token");
}
System.out.println("页面传来的token值为:" + token);
//登录校验逻辑 如果token为null,则直接返回客户端,而不进行下一步接口调用
if (StringUtils.isBlank(token)) {
// 过滤该请求,不对其进行路由
requestContext.setSendZuulResponse(false);
//返回错误代码
requestContext.setResponseStatusCode(HttpStatus.UNAUTHORIZED.value());
}
return null;
}
}
- 关键说明
(1)方法说明
filterType : filter类型,分为pre、error、post、 route
filterOrder: filter执行顺序,通过数字指定,数字越小,执行顺序越先
shouldFilter: filter是否需要执行 true执行 false 不执行
run : filter具体逻辑(上面为true那么这里就是具体执行逻辑)
(2)filter类型说明
pre: 请求执行之前filter
route: 处理请求,进行路由
post: 请求处理完成后执行的filter
error: 出现错误时执行的filter
买家登录
GET /login/buyer
参数
openid: abc
返回
cookie里设置openid=abc
{
code: 0,
msg: "成功",
data: null
}
卖家登录
GET /login/seller
参数
openid: xyz
返回
cookie里设置token=UUID, redis设置key=UUID, value=xyz
{
code: 0,
msg: "成功",
data: null
}