当前位置 : 主页 > 编程语言 > java >

登录鉴权过滤器 1、如果接口是/api/noauth前缀,则不需要登录token 2、如果是/ap

来源:互联网 收集:自由互联 发布时间:2021-06-28
AuthFilter.java package com.zylc.gateway.filter;import com.fasterxml.jackson.core.JsonProcessingException;import com.fasterxml.jackson.databind.ObjectMapper;import com.netflix.zuul.ZuulFilter;import com.netflix.zuul.context.RequestContext;i
AuthFilter.java
package com.zylc.gateway.filter;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.zylc.gateway.model.JsonData;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 登录鉴权过滤器
 * 

* 1、如果接口是/api/noauth前缀,则不需要登录token * 2、如果是/api前缀,则检查token *

* */ @Slf4j @Component public class AuthFilter extends ZuulFilter { @Autowired private ObjectMapper mapper; private static final String NO_AUTH_URL_PREFIX = "/api/noauth"; private static final String AUTH_URL_PREFIX = "/api/"; @Override public String filterType() { return "pre"; } @Override public int filterOrder() { return 1; } @Override public boolean shouldFilter() { return true; } @Override public Object run() { RequestContext ctx = RequestContext.getCurrentContext(); HttpServletRequest request = ctx.getRequest(); String requestUrl = request.getServletPath(); String ipAddr = request.getRemoteAddr(); log.info(String.format("%s [%s] >>> %s",ipAddr, request.getMethod(), requestUrl)); if (requestUrl.indexOf(AUTH_URL_PREFIX) == 0) { if (requestUrl.indexOf(NO_AUTH_URL_PREFIX) == 0) { return null; } // 检查token String token = request.getHeader("x-auth-token"); if (StringUtils.isEmpty(token)) { log.error("无效token"); notLoginResponseBody(ctx); return null; } } return null; } /** * 未登录responseBody */ private void notLoginResponseBody(RequestContext ctx) { ctx.setResponseStatusCode(HttpServletResponse.SC_UNAUTHORIZED); if (ctx.getResponseBody() == null) { JsonData jsonData = JsonData.builder() .success(false) .errMsg("request unauthorized") .build(); try { String body = mapper.writeValueAsString(jsonData); ctx.setResponseBody(body); } catch (JsonProcessingException e) { ctx.setResponseBody(e.getMessage()); } ctx.setSendZuulResponse(false); } } }
网友评论