<?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>
#注册到EurekaServer
eureka:client:serviceUrl:defaultZone: 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 t.RequestContext;
import ption.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 = Logger(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 = CurrentContext().getRequest();String url = RequestURI();log.info("请求地址:"+url);//2.判断是否包含在: static/** ,/login , /dsWith("/login ") || dsWith("/register ") || ains("/static/") ){return false;}//要做登录检查的返回truereturn true;}//核心业务方法 : 登录检查 , 如果请求头中有token,就是登录成功@Overridepublic Object run() {//1.获取请求对象HttpServletRequest request = CurrentContext().getRequest();//响应对象HttpServletResponse response = CurrentContext().getResponse();//2.获取请求头中的 tokenString token = Header("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 = JSONString(resultMap);response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);try {Writer().print(resultJsonString);} catch (IOException e) {e.printStackTrace();}//3.2.阻止filter继续往后执行CurrentContext().setSendZuulResponse(false);}//这里的返回结果没有任何意义,不用管return null;}
}
本文发布于:2024-02-01 10:37:00,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170675502036021.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |