首页 > 其他分享 >4.搭建项目app端服务网关

4.搭建项目app端服务网关

时间:2022-11-24 21:57:02浏览次数:47  
标签:网关 app springframework org import gateway cloud 搭建

搭建项目app端服务网关

一、在heima-leadnews-gateway导入以下依赖

 <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
        </dependency>
    </dependencies>

二、在heima-leadnews-gateway下创建heima-leadnews-app-gateway微服务

2.1启动类

package com.heima.app.gateway;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;


@SpringBootApplication
@EnableDiscoveryClient
public class AppGatewayApplication {
    public static void main(String[] args) {
        SpringApplication.run(AppGatewayApplication.class, args);
    }
}

2.2 bootstrap.yml

server:
  port: 51601
spring:
  application:
    name: leadnews-app-gateway
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.1.2:8848
      config:
        server-addr: 192.168.1.2:8848
        file-extension: yml

2.3 nacos配置中心

spring:
  cloud:
    gateway:
      globalcors:
        add-to-simple-url-handler-mapping: true
        corsConfigurations:
          '[/**]':
            allowedHeaders: "*"
            allowedOrigins: "*"
            allowedMethods:
              - GET
              - POST
              - DELETE
              - PUT
              - OPTION
      routes:
        # 用户微服务
        - id: user
          uri: lb://leadnews-user
          predicates:
            - Path=/user/**
          filters:
            - StripPrefix= 1 #转发时去掉前缀

环境搭建完成以后,启动项目网关和用户两个服务,使用postman进行测试

请求地址:http://localhost:51601/user/api/v1/login/login_auth

三、统一鉴权

1.分析

在网关内部可以通过过滤器完成统一鉴权,限流,日志记录等操作

image-20221124213747892

思路分析:

  1. 用户进入网关开始登陆,网关过滤器进行判断,如果是登录,则路由到后台管理微服务进行登录
  2. 用户登录成功,后台管理微服务签发JWT TOKEN信息返回给用户
  3. 用户再次进入网关开始访问,网关过滤器接收用户携带的TOKEN
  4. 网关过滤器解析TOKEN ,判断是否有权限,如果有,则放行,如果没有则返回未认证错误

2.具体实现:

第一:

​ 在认证过滤器中需要用到jwt的解析,所以需要把工具类拷贝一份到网关微服务

image-20221124214347803

第二:

定义一个类实现GlobalFilter、Ordered这俩个接口;重写里面的方法

filter:过滤器核心业务

getOrder:执行顺序

package com.heima.app.gateway.filter;

import com.heima.app.gateway.utils.AppJwtUtil;
import io.jsonwebtoken.Claims;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

/**
 * 全局过滤器,统一校验token
 */

@Slf4j
@Component
public class AuthorizeFilter implements GlobalFilter, Ordered {

    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        //1.判断是否是登录的请求,如果是,登录的请求不用校验token,放行
        ServerHttpRequest request = exchange.getRequest();
        ServerHttpResponse response = exchange.getResponse();
        if(request.getURI().getPath().contains("/login")){
            return chain.filter(exchange);
        }
        //2.不是登录请求,获取token
        String token = request.getHeaders().getFirst("token");

        //3.判断token是否为空
        if(StringUtils.isEmpty(token)){
            //token为空,返回状态码401
            response.setStatusCode(HttpStatus.UNAUTHORIZED);
            return response.setComplete();
        }
        try {
            //4.判断token是否是否过期
            Claims claimsBody = AppJwtUtil.getClaimsBody(token);
            int result = AppJwtUtil.verifyToken(claimsBody);
            if(result == 1 || result==2){
                response.setStatusCode(HttpStatus.UNAUTHORIZED);
                return response.setComplete();
            }
        } catch (Exception e) {
            e.printStackTrace();
            response.setStatusCode(HttpStatus.UNAUTHORIZED);
            return response.setComplete();
        }


        return chain.filter(exchange);
    }

    /**
     *过滤器执行顺序
     */
    public int getOrder() {
        return -1;
    }
}

标签:网关,app,springframework,org,import,gateway,cloud,搭建
From: https://www.cnblogs.com/zhangdashuaige/p/16923569.html

相关文章

  • uniapp h5转app
    关于movable-area、movable-view在ios上没有问题,但是在安卓上,如果通过滑块滑动去改变别的元素的,会出现卡顿、掉帧的情况的,及其不友好解决办法:可以将其......
  • Nginx初步-环境搭建
    Nginx的安装1、weget下载:http://nginx.org/download/nginx-1.6.2.tar.gz2、进行安装:tar-zxvfnginx-1.6.2.tar.gz3、下载所需要的依赖库文件  yuminstallpcre、yumin......
  • uniapp 微信公众号开发 本地开发测试 本地接口联调
    1.条件本地一个uniapp的H5项目(本地运行localhost:8080)本地一个webservice接口项目(本地运行127.0.0.1:9999)目的:因微信公众号没有提供良好的测试体验环境,每次测试......
  • 2022最新整理iOS app上架app详细教程​
    上架iOS需要一个付费688的开发者账号,还没有的话申请一个或者借用。​​​申请苹果开发者账号教程​​​上架AppStore之前是先安装到苹果手机测试调试好,app能正常运行再上......
  • iOS App上架App Store详细教程​
    ​​​​​​​注意:下载AU后需安装java8运行环境才能启动;安装好了最新Java8运行环境,解压AU软件包,无需安装,Windows64位系统点击appuploader.exe启动;如果是Linux/Windo......
  • iOS上架之使用appuploader创建构建版本的流程​
    1、打开appuploader软件​2、登录苹果开发者账号​3、点击appuploader右上角的设置​4、设置苹果app上传密码​5、开始上传ipa的安装包​......
  • push证书申请_iOS上架App Store​
    iOSAPP需要推送通知,要用到iOS推送证书,分为测试调试用的iOS推送证书和上架到AppStore的ios推送证书!​iOS证书申请这里用到一个工具Appuploader,可以在win系统中辅助快速申......
  • push证书申请_iOS上架App Store​
    iOSAPP需要推送通知,要用到iOS推送证书,分为测试调试用的iOS推送证书和上架到AppStore的ios推送证书!​iOS证书申请这里用到一个工具Appuploader,可以在win系统中辅助快速申......
  • 用Appuploader发布上传iOS APP上架​
    Appuploader是一个IOS开发助手,可以快速,轻松地生成ios开发证书,不需要钥匙串助手;appuploader可以批量上传屏幕截图并将ipa文件上传到Apple商店,在windows,linux或mac上,不需要......
  • iOS上架app store详细教材
    1、安装iOS上架辅助软件Appuploader2、申请iOS发布证书(p12)3、申请iOS发布描述文件(mobileprovision)4、打包ipa5、上传ipa到iTunesConn1、安装iOS上架辅助软件Appuploade......