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
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); } } }
