教育项目之网关模块介绍

1.pom文件介绍

<?xml version="1.0" encoding="UTF-8"?>
<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">
    <parent>
        <artifactId>GrainOnlineEducation_Parent</artifactId>
        <groupId>com.grain</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>GrainOnlineEducation_Gateway</artifactId>

    <dependencies>
        <!--网关-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
        </dependency>

        <!--服务注册-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
    </dependencies>

</project>

2.代码分析

package com.grain.gateway.filter;

import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

import javax.servlet.http.HttpServletRequest;

import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.PRE_TYPE;

/**
 * @author:Dragon Wen
 * @email:18475536452@163.com
 * @date:Created in 2020/3/14 15:05
 * @description:
 * @modified By:
 * @version: $
 */
@Component
public class LoginFilter extends ZuulFilter {

    //定义过滤器的类型
    @Override
    public String filterType() {
        return PRE_TYPE;  //PRE
    }

    //过滤器执行顺序,返回的值越小,越先执行
    @Override
    public int filterOrder() {
        return 1;
    }

    //决定是否执行下面的run方法
    //如果返回false,表示过滤器放行操作,不执行run方法
    //如果返回true,过滤器没有放行,执行run方法
    @Override
    public boolean shouldFilter() {
        //判断:访问路径包含/eduvod/vid/getPlayAuthFront进行登录校验
        //1 获取请求的路径 uri,HttpServletRequest是请求对象
        RequestContext currentContext = RequestContext.getCurrentContext();
        HttpServletRequest request = currentContext.getRequest();
        String requestURI = request.getRequestURI();

        System.out.println("uri: "+requestURI);

        String palyUrl = "/vod/get-play-auth/";
        //2 根据获取请求路径判断,路径里面是否包含  /vod/get-play-auth/
        if(!StringUtils.isEmpty(requestURI) && requestURI.contains(palyUrl)) {
            //3 如果包含,进行验证操作,return true
            return true; //run方法执行,进行校验
        }
        return false;  //放行
    }

    //run方法写过滤器具体逻辑
    @Override
    public Object run() throws ZuulException {
        System.out.println("run方法执行了.........");
        RequestContext currentContext = RequestContext.getCurrentContext();
        HttpServletRequest request = currentContext.getRequest();

        String token = request.getParameter("token");
        if(StringUtils.isEmpty(token)) {
            //不能访问接口
            currentContext.setSendZuulResponse(false); //不会向后执行
            //设置不能访问状态码
            currentContext.setResponseStatusCode(HttpStatus.UNAUTHORIZED.value());
        }

        return null;
    }
}

对前端发过来的请求进行网关过滤,根据自己的逻辑处理。

package com.grain.gateway;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;

/**
 * @author:Dragon Wen
 * @email:18475536452@163.com
 * @date:Created in 2020/3/14 13:15
 * @description:
 * @modified By:
 * @version: $
 */
@SpringBootApplication
@EnableZuulProxy
@EnableEurekaClient
public class ApiGatewayApplication {

    public static void main(String[] args) {
        SpringApplication.run(ApiGatewayApplication.class, args);
    }
}

3.配置文件

application.properties:

server.port=9001

#环境设置:dev、test、prod
spring.profiles.active=dev

#服务的名称
spring.application.name=grain-api-gateway

### 配置URL 映射 ###(该功能类似于Nginx)
#这里的配置表示,访问path路径 直接重定向到url指定的地址
#如:访问        http://localhost:9001/teacher/list
#    重定向到    http://localhost:8001/teacher/list
#zuul.routes.api-edu.path=/teacher/**
#zuul.routes.api-edu.url=http://localhost:8001/teacher/

#指定注册中心地址
eureka.client.service-url.defaultZone=http://localhost:8004/eureka/
#eureka服务器上获取的是服务器的ip地址,否则是主机名
eureka.instance.prefer-ip-address=true

### 环境隔离配置 ###
#禁止grain-statistics对外提供接口
#zuul.ignored-services=grain-statistics

### 禁止通过网关访问路由 ###
#zuul.ignored-patterns=/**/admin/**

### 自定义路由映射###
#zuul.routes.grain-teacher=/teacher-api/**

#还原被网关过滤的请求头
zuul.sensitive-headers=
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bst@微胖子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值