Zuul 请求过滤配置
比如我们登录某个系统 需要身份验证,用户名密码啥的;
我们请求服务,也可以来设置身份验证,也就是过滤非法请求;Zuul通过ZuulFilter过滤器实现;
一般具体实现的话 每次经过Zuul服务网关 我们都对带来的token进行有效性验证;
我们先定义一个 AccessFilter类:
package com.java1234.filter; import javax.servlet.http.HttpServletRequest; import org.apache.log4j.Logger; import com.netflix.zuul.ZuulFilter; import com.netflix.zuul.context.RequestContext; import com.netflix.zuul.exception.ZuulException; public class AccessFilter extends ZuulFilter{ Logger logger=Logger.getLogger(AccessFilter.class); /** * 判断该过滤器是否要被执行 */ @Override public boolean shouldFilter() { // TODO Auto-generated method stub return true; } /** * 过滤器的具体执行逻辑 */ @Override public Object run() throws ZuulException { RequestContext ctx = RequestContext.getCurrentContext(); HttpServletRequest request = ctx.getRequest(); String parameter = request.getParameter("accessToken"); logger.info(request.getRequestURL().toString()+" 请求访问"); if(parameter==null){ logger.error("accessToken为空!"); ctx.setSendZuulResponse(false); ctx.setResponseStatusCode(401); ctx.setResponseBody("{\"result\":\"accessToken is empty!\"}"); return null; } // token判断逻辑 logger.info(request.getRequestURL().toString()+" 请求成功"); return null; } /** * 过滤器的类型 这里用pre,代表会再请求被路由之前执行 */ @Override public String filterType() { // TODO Auto-generated method stub return "pre"; } /** * 过滤器的执行顺序 */ @Override public int filterOrder() { // TODO Auto-generated method stub return 0; } }
然后再开启下 Filter配置:
package com.java1234.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import com.java1234.filter.AccessFilter; /** * Zuul配置 * @author Administrator * */ @Configuration public class ZuulConfig { @Bean public AccessFilter accessFilter(){ return new AccessFilter(); } }
配置完后,我们 访问:http://zuul.java1234.com:3001/java1234/studentServer/student/list
发现歇逼了:
{"result":"accessToken is empty!"}
我们带个 accessToken http://zuul.java1234.com:3001/java1234/studentServer/student/list?accessToken=3232
就返回了结果;
当然 token的生成和验证 这里我们不细讲了,具体要根据设计来;