- 全新校驗(yàn)攔截器
/**
* 登錄過濾器
*記得類上加Component注解
*/
@Component
public class LoginFilter extends ZuulFilter {
/**
* 過濾器類型代赁,前置過濾器
*/
@Override
public String filterType() {
return PRE_TYPE;
}
/**
* 過濾器順序坟瓢,越小越先執(zhí)行
*/
@Override
public int filterOrder() {
return 4;
}
/**
* 過濾器是否生效
* 返回true代表需要權(quán)限校驗(yàn)岁诉,false代表不需要用戶校驗(yàn)即可訪問
*/
@Override
public boolean shouldFilter() {
//共享RequestContext娩贷,上下文對象
RequestContext requestContext = RequestContext.getCurrentContext();
HttpServletRequest request = requestContext.getRequest();
System.out.println(request.getRequestURI());
//需要權(quán)限校驗(yàn)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;
}
/**
* 業(yè)務(wù)邏輯
* 只有上面返回true的時候纬乍,才會進(jìn)入到該方法
*/
@Override
public Object run() throws ZuulException {
//JWT
RequestContext requestContext = RequestContext.getCurrentContext();
HttpServletRequest request = requestContext.getRequest();
//token對象,有可能在請求頭傳遞過來碱茁,也有可能是通過參數(shù)傳過來,實(shí)際開發(fā)一般都是請求頭方式
String token = request.getHeader("token");
if (StringUtils.isBlank((token))) {
token = request.getParameter("token");
}
System.out.println("頁面?zhèn)鱽淼膖oken值為:" + token);
//登錄校驗(yàn)邏輯 如果token為null仿贬,則直接返回客戶端纽竣,而不進(jìn)行下一步接口調(diào)用
if (StringUtils.isBlank(token)) {
// 過濾該請求,不對其進(jìn)行路由
requestContext.setSendZuulResponse(false);
//返回錯誤代碼
requestContext.setResponseStatusCode(HttpStatus.UNAUTHORIZED.value());
}
return null;
}
}
- 關(guān)鍵說明
(1)方法說明
filterType : filter類型,分為pre茧泪、error蜓氨、post、 route
filterOrder: filter執(zhí)行順序队伟,通過數(shù)字指定穴吹,數(shù)字越小,執(zhí)行順序越先
shouldFilter: filter是否需要執(zhí)行 true執(zhí)行 false 不執(zhí)行
run : filter具體邏輯(上面為true那么這里就是具體執(zhí)行邏輯)
(2)filter類型說明
pre: 請求執(zhí)行之前filter
route: 處理請求嗜侮,進(jìn)行路由
post: 請求處理完成后執(zhí)行的filter
error: 出現(xiàn)錯誤時執(zhí)行的filter
買家登錄
GET /login/buyer
參數(shù)
openid: abc
返回
cookie里設(shè)置openid=abc
{
code: 0,
msg: "成功",
data: null
}
賣家登錄
GET /login/seller
參數(shù)
openid: xyz
返回
cookie里設(shè)置token=UUID, redis設(shè)置key=UUID, value=xyz
{
code: 0,
msg: "成功",
data: null
}