Spring Cloud 使用路由閘道器的服務過濾功能
阿新 • • 發佈:2018-12-12
import com.netflix.zuul.ZuulFilter; import com.netflix.zuul.context.RequestContext; import com.netflix.zuul.exception.ZuulException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import javax.servlet.http.HttpServletRequest; import java.io.IOException; /** * Zuul 的服務過濾演示 * <p>Title: LoginFilter</p> * <p>Description: </p> * * @author Lusifer * @version 1.0.0 * @date 2018/5/29 22:02 */ @Component public class LoginFilter extends ZuulFilter { private static final Logger logger = LoggerFactory.getLogger(LoginFilter.class); /** * 配置過濾型別,有四種不同生命週期的過濾器型別 * 1. pre:路由之前 * 2. routing:路由之時 * 3. post:路由之後 * 4. error:傳送錯誤呼叫 * @return */ @Override public String filterType() { return "pre"; } /** * 配置過濾的順序 * @return */ @Override public int filterOrder() { return 0; } /** * 配置是否需要過濾:true/需要,false/不需要 * @return */ @Override public boolean shouldFilter() { return true; } /** * 過濾器的具體業務程式碼 * @return * @throws ZuulException */ @Override public Object run() throws ZuulException { RequestContext context = RequestContext.getCurrentContext(); HttpServletRequest request = context.getRequest(); logger.info("{} >>> {}", request.getMethod(), request.getRequestURL().toString()); String token = request.getParameter("token"); if (token == null) { logger.warn("Token is empty"); context.setSendZuulResponse(false); context.setResponseStatusCode(401); try { context.getResponse().getWriter().write("Token is empty"); } catch (IOException e) { } } else { logger.info("OK"); } return null; } }