admin管理员组

文章数量:1794759

zuul

zuul

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns=".0.0"xmlns:xsi=""xsi:schemaLocation=".0.0 .0.0.xsd"><parent><artifactId>spring_cloud_netflix</artifactId><groupId>com.qxf</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>springcloud-zuul-server-1060</artifactId><properties><mavenpiler.source>8</mavenpiler.source><mavenpiler.target>8</mavenpiler.target></properties><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-zuul</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.69</version></dependency></dependencies>
</project>

application.yml

#注册到EurekaServer
eureka:client:serviceUrl:defaultZone: http://localhost:10010/eureka/#使用ip地址进行注册instance:prefer-ip-address: true#要指定服务的实例IDinstance-id:  zuul-server:10060
server:port: 10060
spring:application:name: zuul-server  #服务名zuul:prefix: "/servers"  #统一访问前缀ignoredServices: "*"  #禁用掉使用浏览器通过服务名的方式访问服务routes:pay-server: "/pay/**"   #指定pay-server这个服务使用 /pay路径来访问  - 别名order-server: "/order/**"   #指定order-server这个服务使用 /order路径来访问user-server: "/user/**"   #指定order-server这个服务使用 /order路径来访问

启动类

package com.qxf;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloudflix.eureka.EnableEurekaClient;
import org.springframework.cloudflix.zuul.EnableZuulProxy;/*** 用户的启动类* @EnableEurekaClient: 标记该应用是 Eureka客户端* @EnableZuulProxy : 开启zuul 可以看做是 @EnableZuulServer 的增强版 ,一般用这个* @EnableZuulServer : 这个标签也可以开启zuul,但是这个标签开启的Filter更少*/
@SpringBootApplication
@EnableEurekaClient
@EnableZuulProxy
public class ZuulServerApplication1060
{public static void main( String[] args ){SpringApplication.run(ZuulServerApplication1060.class);}
}

LoginCheckFilter

package com.qxf.Filter;import com.alibaba.fastjson.JSON;
import comflix.zuul.ZuulFilter;
import comflix.zuul.context.RequestContext;
import comflix.zuul.exception.ZuulException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloudflix.zuul.filters.support.FilterConstants;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;@Component
public class LoginCheckFilter extends ZuulFilter {private static final Logger log = LoggerFactory.getLogger(LoginCheckFilter.class);//执行顺序private static final int ORDER = 1;//filter类型 : "pre"前置@Overridepublic String filterType() {return FilterConstants.PRE_TYPE;	//pre}//执行顺序@Overridepublic int filterOrder() {return ORDER;}//返回结果决定 是否要执行run方法@Overridepublic boolean shouldFilter() {// /static/**  ,/login , /register 不需要做登录检查,返回false//1.获取request对象 , 获取请求中的urlHttpServletRequest request = RequestContext.getCurrentContext().getRequest();String url = request.getRequestURI();log.info("请求地址:"+url);//2.判断是否包含在: static/**  ,/login , /registerif(url.endsWith("/login ") || url.endsWith("/register ") || url.contains("/static/") ){return false;}//要做登录检查的返回truereturn true;}//核心业务方法 : 登录检查 , 如果请求头中有token,就是登录成功@Overridepublic Object run() {//1.获取请求对象HttpServletRequest request = RequestContext.getCurrentContext().getRequest();//响应对象HttpServletResponse response = RequestContext.getCurrentContext().getResponse();//2.获取请求头中的 tokenString token = request.getHeader("token");//3.如果没有token,登录检查失败 ,if(!StringUtils.hasLength(token)){//3.1.返回登录检查失败的错误信息 :{ success:false, message:"登录检查失败,请重新登录"}Map<String,Object> resultMap = new HashMap<>();resultMap.put("success" , false);resultMap.put("message" , "登录检查失败,请重新登录");//中文编码response.setContentType("application/json;charset=utf-8");//把map转成json字符串,写到浏览器String resultJsonString = JSON.toJSONString(resultMap);response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);try {response.getWriter().print(resultJsonString);} catch (IOException e) {e.printStackTrace();}//3.2.阻止filter继续往后执行RequestContext.getCurrentContext().setSendZuulResponse(false);}//这里的返回结果没有任何意义,不用管return null;}
}

本文标签: zuul