采用网关过滤器实现权限验证
1、创建 zuul 项目
2、修改 pom.xml 文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.sxt</groupId><artifactId>zuul-geteway-example</artifactId><version>0.0.1-SNAPSHOT</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.13.RELEASE</version><relativePath /> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Dalston.SR5</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zuul</artifactId></dependency></dependencies>
</project>
3、修改全局配置文件
4、创建过滤器类
@Component
public class LogFilter extends ZuulFilter{private static final Logger logger = LoggerFactory.getLogger(LogFilter.class);/*** 过滤内容:在 run 方法编写过滤逻辑*/@Overridepublic Object run() {//获取请求上下文RequestContext rc = RequestContext.getCurrentContext();HttpServletRequest request = rc.getRequest();//获取表单 tokenString token = request.getParameter("token");if(token == null){logger.warn("token is null............"); rc.setSendZuulResponse(false);//代表请求结束。不在继 续向下请求 rc.setResponseStatusCode(401);//设置状态码rc.setResponseBody("{"result":"token is null"}");//响应内容rc.getResponse().setContentType("text/html;charset=utf-8");//响应类型}logger.info("token not null");return null;}/*** 是否开启过滤器:默认为 false 不开启*/@Overridepublic boolean shouldFilter() {return true;}/*** 过滤器的执行顺序:通过整数表示顺序,数值越小,优先级越高 */@Overridepublic int filterOrder() {return 0;}/*** 过滤器类型:通过过滤器类型决定了过滤器执行的时间 */@Overridepublic String filterType() {return "pre";}
}
5、添加启动类
@SpringBootApplication
@EnableZuulProxy //开启网关
public class ZuulApplication {public static void main(String[] args) {SpringApplication.run(ZuulApplication.class, args);}
}
测试:
未附带 token
附带 token
采用网关过滤器对系统异常同一处理
当访问一个错误页面的时候,按照Zull请求的生命周期顺序进行依次访问。
同类型中,按照 FilterOrder 来决定执行器的优先级。接下来的就是按照生命周期顺序来决定。
采用网关过滤器对系统异常同一处理
创建类去实现 ErrorController ,重写未实现的方法。
当访问错误页面的时候,结果如下图