爆款云主机2核4G限时秒杀,88元/年起!
查看详情

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心

      超详细的SpringBoot+Vue+Jwt实现token的认证(重点部分讲解和完整的代码设计)

      首页 知识中心 软件开发 文章详情页

      超详细的SpringBoot+Vue+Jwt实现token的认证(重点部分讲解和完整的代码设计)

      2023-06-13 08:35:22 阅读次数:458

      java,spring boot,vue

      前端需要掌握的知识:
      1、路由守卫:知识点。使用路由拦截、如果有token则放行、没有token跳转到登录页面
      2、Vuex的详细理解:知识点。多个组件共享数据。这里牵涉到一些知识点的简写形式

        1、视频演示

        toekn的生成使用

        这里的注销原理:给注销按钮绑定一个事件、触发函数、在函数中移除存储的token,同时跳转到登录页。这里不在演示(过于简单)

        2、token的生成以及验证的思路

        • 1、后端使用jwt生成token返回给前端,前端存储token。在进行路由跳转之前、通过路由守卫判断token是否为空。如果为空、则跳转到指定页面。不为空则放行。同时将token放入到请求头中、后端对token进行验证

        3、后端代码

        3.1 引入jwt依赖

        提示:如果引入失败、请替换版本

        <!--集成jwt实现token认证-->
                <dependency>
                    <groupId>com.auth0</groupId>
                    <artifactId>java-jwt</artifactId>
                    <version>3.2.0</version>
                </dependency>

        3.2 生成token的工具类

        package com.zyz.bookshopmanage.Utils;
        
        import com.auth0.jwt.JWT;
        import com.auth0.jwt.JWTVerifier;
        import com.auth0.jwt.algorithms.Algorithm;
        import com.auth0.jwt.interfaces.DecodedJWT;
        import com.zyz.bookshopmanage.pojo.User;
        
        import java.util.Date;
        
        /**
         * @author 静小文
         * @version 1.0
         * @data 2022/9/9 14:28
         */
        public class MyTokenUtil {
            private static final long EXPIRE_TIME= 10*60*60*1000;
            /**
             * 密钥盐
             */
            private static final String TOKEN_SECRET="test";
            /**
             * 签名生成
             * @param user
             * @return
             */
            public static String sign(User user){
                String token = null;
                try {
                    Date expiresAt = new Date(System.currentTimeMillis() + EXPIRE_TIME);
                    token = JWT.create()
                            .withIssuer("auth0")
                            .withClaim("userName", user.getUserName())
                            .withExpiresAt(expiresAt)
                            // 使用了HMAC256加密算法。
                            .sign(Algorithm.HMAC256(TOKEN_SECRET));
                } catch (Exception e){
                    e.printStackTrace();
                }
                return token;
            }
            /**
             * 签名验证
             * @param token
             * @return
             */
            public static boolean verify(String token){
                try {
                    JWTVerifier verifier = JWT.require(Algorithm.HMAC256(TOKEN_SECRET)).withIssuer("auth0").build();
                    DecodedJWT jwt = verifier.verify(token);
                    System.out.println("认证通过:");
                    System.out.println("userName: " + jwt.getClaim("userName").asString());
                    System.out.println("过期时间:      " + jwt.getExpiresAt());
                    return true;
                } catch (Exception e){
                    return false;
                }
            }
        
        }

        提示

        2022年超详细的SpringBoot+Vue+Jwt实现token的认证(重点部分讲解和完整的代码设计)


        3.3 token认证过滤器

        提示:登录、注册页一般不需要token。直接放行

        package com.zyz.bookshopmanage.config;
        
        import com.zyz.bookshopmanage.config.handler.MyTokenInterceptor;
        import org.springframework.context.annotation.Configuration;
        import org.springframework.scheduling.concurrent.ConcurrentTaskExecutor;
        import org.springframework.web.servlet.config.annotation.AsyncSupportConfigurer;
        import org.springframework.web.servlet.config.annotation.CorsRegistry;
        import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
        import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
        
        import java.util.ArrayList;
        import java.util.List;
        import java.util.concurrent.*;
        
        /**
         * @author 静小文
         * @version 1.0
         * @data 2022/9/9 10:36
         */
        
        @Configuration
        public class CrosConfig implements WebMvcConfigurer {
            private ExecutorService executorService = null;
        
        
            /**
             * 开启跨域
             *
             * @param registry
             */
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                //设置允许跨域的路由
                registry.addMapping("/**")
                        .allowedOriginPatterns("*")
                        .allowedMethods("GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS")
                        .allowCredentials(true)
                        .maxAge(3600)
                        .allowedHeaders("*");
            }
        
            private MyTokenInterceptor tokenInterceptor;
        
            //构造方法
            public CrosConfig(MyTokenInterceptor tokenInterceptor) {
                this.tokenInterceptor = tokenInterceptor;
            }
        
            @Override
            public void configureAsyncSupport(AsyncSupportConfigurer configurer) {
                executorService = new ThreadPoolExecutor(2,
                        2,
                        100,
                        TimeUnit.SECONDS,
                        new LinkedBlockingQueue<>(2),
                        Executors.defaultThreadFactory(),
                        new ThreadPoolExecutor.AbortPolicy());
                configurer.setTaskExecutor(new ConcurrentTaskExecutor(executorService));
                configurer.setDefaultTimeout(30000);
            }
        
            @Override
            public void addInterceptors(InterceptorRegistry registry) {
                List<String> excludePath = new ArrayList<>();
                //排除拦截,除了注册登录(此时还没token),其他都拦截
                excludePath.add("/user/register");
                excludePath.add("/user/login");
        
                registry.addInterceptor(tokenInterceptor)
                        .addPathPatterns("/**")
                        .excludePathPatterns(excludePath);
                WebMvcConfigurer.super.addInterceptors(registry);
            }
        
        }

        3.4 token认证

        package com.zyz.bookshopmanage.config.handler;
        
        import com.alibaba.fastjson.JSONObject;
        import com.zyz.bookshopmanage.Utils.MyTokenUtil;
        import org.springframework.stereotype.Component;
        import org.springframework.web.servlet.HandlerInterceptor;
        
        import javax.servlet.http.HttpServletRequest;
        import javax.servlet.http.HttpServletResponse;
        
        /**
         * @author 静小文
         * @version 1.0
         * @data 2022/9/9 14:32
         */
        
        @Component
        public class MyTokenInterceptor implements HandlerInterceptor {
            @Override
            public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception{
                if(request.getMethod().equals("OPTIONS")){
                    response.setStatus(HttpServletResponse.SC_OK);
                    return true;
                }
                response.setCharacterEncoding("utf-8");
                //前端vue将token添加在请求头中
                String token = request.getHeader("token");
                if(token != null){
                    boolean result = MyTokenUtil.verify(token);
                    if(result){
                        System.out.println("通过拦截器");
                        return true;
                    }
                }
                response.setCharacterEncoding("UTF-8");
                response.setContentType("application/json; charset=utf-8");
                try{
                    JSONObject json = new JSONObject();
                    json.put("msg","token verify fail");
                    json.put("code","50000");
                    response.getWriter().append(json.toJSONString());
                    System.out.println("认证失败,未通过拦截器!!!");
        
                }catch (Exception e){
                    e.printStackTrace();
                    response.sendError(500);
                    return false;
                }
                return false;
            }
        
        }

        3.5 登录成功、返回token

        (value = "/user/login", method = RequestMethod.POST)
            public Result login(@RequestBody User users) {
                User user = userMapper.findByName(users.getUserName());
                boolean flag = false;
                if (user != null) {
                    try {
                        flag = MyMD5Util.validPassword(users.getPassword(), user.getPassword());
        
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                } else {
                    return Result.error().data("errMessage", "不存在该用户");
                }
        
                if (flag) {
                    String token = MyTokenUtil.sign(user);
                    return Result.ok().data("token",token);
                } else {
                    return Result.error().data("errMessage", "密码错误");
                }
        
        
            }

        4、前端代码

        4.1 路由守卫

        提示:路由守卫写到main.js中可以、直接写在router/index.js中也可以

        import Vue from 'vue'
        import Router from 'vue-router'
        // import HelloWorld from '@/components/HelloWorld'
        import Register from '../views/main/Register'
        import Login from '@/views/main/Login'
        import Home from '@/views/main/Home'
        import HomePage from '@/views/end/HomePage'
        import AdminInfo from '@/views/end/AdminInfo'
        import UserInfo from '@/views/end/UserInfo'
        
        Vue.use(Router)
        
        const router = new Router({
          routes: [
            {
              path: '/',
              name: '注册页',
              component: Register
            },
            {
              path: '/login',
              name: '登录页',
              component: Login
            },
            //菜单栏设置
            {
              path: '/Home',
              name: "主界面",
              component: Home,
              redirect: '/HomePage',
              children: [
                {
                  path: '/HomePage',
                  name: '后台首页',
                  component: HomePage
                },
                {
                  path: '/AdminInfo',
                  name: '管理员信息界面',
                  component: AdminInfo
                }, {
                  path: '/UserInfo',
                  name: "用户信息界面",
                  component: UserInfo
                }
              ]
        
            },
        
        
          ]
        })
        
        
        //全局前置守卫
        router.beforeEach((to, from, next) => {
          // to and from are both route objects. must call `next`.
          if (to.path === '/register' || to.path === '/login' || to.path === '/') {
            next();//直接放行
          } else {
            const token = localStorage.getItem('Authorization');
            if (token === null || token === '') {
              next('/login')
            } else {
          
              next()
            }
          }
        })
        
        
        export

        4.2 Vuex的设计(设置共享状态)

        对vue应用中多个组件的共享状态进行集中式的管理(读/写),也是一种组件间通信的方式,且适用于任意组件间通信。

        如果前端没有基础、这一部分可能不明所以然。请看这里:vuex的介绍

        import Vue from 'vue'
        import Vuex from 'vuex'
        
        Vue.use(Vuex)
        
        const actions = {
        
        }
        
        const mutations = {
            //修改token,将token放入localStorage中
            changeLogin(state, user) {
                state.Authorization = user.Authorization
                localStorage.setItem('Authorization', user.Authorization)
            },
        
            //注销
            logout(state) {
                state.Authorization = null
                localStorage.removeItem('Authorization')
            }
        
        }
        
        const state = {
            //存储token
            Authorization: localStorage.getItem('Authorization') ? localStorage.getItem('Authorization') : '',
        
        
        }
        
        //向外暴露
        const store = new Vuex.Store({
            actions,
            mutations,
            state
        })
        
        
        
        export

        4.3 将token放入到请求头中

        提示:如果请求头中没有token、则后端获取不到token的值进行校验、认证不通过。

        _axios.interceptors.request.use(
            function (config) {
                if (localStorage.getItem('Authorization')) {
                    config.headers.token = localStorage.getItem('Authorization');
                }
                return config;
            },
            function (error) {
                return Promise.reject(error);
            }
        );

        4.4 登录成功后、将后端返回的token存储

        //简化操作
        …mapMutations([‘changeLogin’]),这个就牵涉到组件间的通信、这里简化使用。不懂得请看开头给出的链接、这里不做过多讲解。有好几种方式可以实现组件间的通信

        • 1、引入import { mapMutations } from 'vuex';。目的是简化组件间的通信

        • 2、使用简化形式: ...mapMutations(['changeLogin']),

        {
            //简化操作
            ...mapMutations([]),
            submitForm(ruleForm) {
              const _this  this;
        
              this.[ruleForm].validate((valid) > {
                 (valid) {
                  axios
                    .post(  ,this.ruleForm)
                    .then(function (resp) {
                      console.log(resp);
                       (resp.data.code  ) {
                        console.log(resp.data)
                        const token  resp.data.data.token
                        console.log(token)
                        _this.changeLogin({Authorization:token})
        
                        _this.(, , {
                          confirmButtonText: ,
                          callback: (action) > {
                            _this..push();
                          },
                        });
                      }  {
                        _this..error(resp.data.data.errMessage);
                      }
                    });
                }  {
                  Message.error()
                  return ;
                }
              });
            },
            restForm(formName) {
              this.[formName].resetFields();
            },
          },

        4.5、注销

        在这里插入代码片

        2022年超详细的SpringBoot+Vue+Jwt实现token的认证(重点部分讲解和完整的代码设计)

        5、友情提示

        如果安装报错、则更改安装的版本。默认是最新的。安装指定版本npm i vuex@3。@后边跟安装指定版本

        • 1、如果不了解Vuex、请了解后再来看(使用前请安装vuex。npm i vuex)

        • 2、如果不了解路由守卫、请了解后再来看 (使用前请安装router。npm i router)

        • 3、一定要将token放入到请求头中、后端要根据token来进行认证(使用前请安装axios。npm i axios)

        • 4、过滤器的拦截、不需要认证的直接放行。像登录、注册等


        版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://blog.51cto.com/u_15740728/5685636,作者:郑同学要努力呀,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

        上一篇:SpringBoot入门二十九,整合Swagger3

        下一篇:SpringBoot使用@ServerEndpoint无法依赖注入问题解决 SpringBoot webSocket配置

        相关文章

        2025-05-14 10:02:58

        java休眠到指定时间怎么写

        java休眠到指定时间怎么写

        2025-05-14 10:02:58
        java , sleep , Thread , util , 方法
        2025-05-14 10:02:58

        java项目多端数据同步解决方案

        多端数据同步是指在多个设备(例如桌面应用、移动应用、Web应用)之间保持数据的一致性。

        2025-05-14 10:02:58
        java , Spring , WebSocket , 同步 , 数据 , 版本号
        2025-05-13 09:49:12

        Java学习(动态代理的思想详细分析与案例准备)(1)

        Java学习(动态代理的思想详细分析与案例准备)(1)

        2025-05-13 09:49:12
        java , 代理 , 代码 , 对象 , 接口 , 方法 , 需要
        2025-05-09 08:20:32

        基于IDEA的Maven简单工程创建及结构分析

        通过一个 mvn 命令直接让我们创建一个 Maven 的脚手架。

        2025-05-09 08:20:32
        java , Maven , xml , 创建 , 文件 , 文件夹 , 项目
        2025-05-08 09:03:57

        前K个高频元素java

        给定一个非空的整数数组,返回其中出现频率前 前K个高频元素java 高的元素。

        2025-05-08 09:03:57
        java , 元素 , 样例 , 给定
        2025-05-08 09:03:21

        基于java Swing开发的学生成绩管理系统【项目源码+数据库脚本】

        基于java Swing开发的学生成绩管理系统【项目源码+数据库脚本】

        2025-05-08 09:03:21
        java , Swing , 学生 , 源码
        2025-05-08 09:03:21

        java Swing学生成绩管理系统【项目源码+数据库脚本】

        本项目是一套基于java Swing开发的学生成绩管理系统,主要针对计算机相关专业的正在做bishe的学生和需要项目实战练习的Java学习者。

        2025-05-08 09:03:21
        java , 学生 , 成绩 , 数据库 , 源码
        2025-05-07 09:08:08

        java Swing学生选课管理系统【源码+数据库+报告】

        本项目是一套基于java Swing学生选课管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。

        2025-05-07 09:08:08
        java , 学生 , 截图 , 源码
        2025-05-07 09:08:08

        java swing人机对战五子棋(含背景音乐)

        本项目是一套基于java swing的人机对战五子棋系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。

        2025-05-07 09:08:08
        java , 源码
        2025-04-23 08:18:27

        nginx结合前后端分离项目springboot+vue的配置

        项目采用的是前后端分离springboot+vue,通过nginx监听,转发到对应的前端页面或者后台接口调用

        2025-04-23 08:18:27
        nginx , springboot , vue , 分离 , 配置
        查看更多
        推荐标签

        作者介绍

        天翼云小翼
        天翼云用户

        文章

        33561

        阅读量

        5249310

        查看更多

        最新文章

        java项目多端数据同步解决方案

        2025-05-14 10:02:58

        Java学习(动态代理的思想详细分析与案例准备)(1)

        2025-05-13 09:49:12

        前K个高频元素java

        2025-05-08 09:03:57

        基于java Swing开发的学生成绩管理系统【项目源码+数据库脚本】

        2025-05-08 09:03:21

        java Swing学生成绩管理系统【项目源码+数据库脚本】

        2025-05-08 09:03:21

        java Swing学生选课管理系统【源码+数据库+报告】

        2025-05-07 09:08:08

        查看更多

        热门文章

        JAVA__接口的作用

        2023-04-18 14:14:13

        Java学习之算术运算符两只老虎

        2023-04-19 09:23:13

        排序算法Java版-归并排序算法

        2023-04-24 11:25:19

        JAVA多线程学习笔记

        2023-05-11 06:05:48

        try...catch...finally java

        2023-03-29 09:40:26

        Java:apache.poi读写Excel文件

        2023-02-22 06:40:54

        查看更多

        热门标签

        java Java python 编程开发 代码 开发语言 算法 线程 Python html 数组 C++ 元素 javascript c++
        查看更多

        相关产品

        弹性云主机

        随时自助获取、弹性伸缩的云服务器资源

        天翼云电脑(公众版)

        便捷、安全、高效的云电脑服务

        对象存储

        高品质、低成本的云上存储服务

        云硬盘

        为云上计算资源提供持久性块存储

        查看更多

        随机文章

        Map接口和常用方法

        Vue之v-cloak、v-text、v-html的学习使用

        PL/SQL编程实现Oracle分页 java调用

        java PDF方案

        `<jsp:getProperty>`动作和`<jsp:setProperty>`动作的使用在一个静态页面填写图书的基本信息,页面信息提交给其他页面,并且在其页面显示。要去将表单元素的值赋值给Java

        谈谈SpringBoot中@Async注解使用的一些误区

        • 7*24小时售后
        • 无忧退款
        • 免费备案
        • 专家服务
        售前咨询热线
        400-810-9889转1
        关注天翼云
        • 旗舰店
        • 天翼云APP
        • 天翼云微信公众号
        服务与支持
        • 备案中心
        • 售前咨询
        • 智能客服
        • 自助服务
        • 工单管理
        • 客户公告
        • 涉诈举报
        账户管理
        • 管理中心
        • 订单管理
        • 余额管理
        • 发票管理
        • 充值汇款
        • 续费管理
        快速入口
        • 天翼云旗舰店
        • 文档中心
        • 最新活动
        • 免费试用
        • 信任中心
        • 天翼云学堂
        云网生态
        • 甄选商城
        • 渠道合作
        • 云市场合作
        了解天翼云
        • 关于天翼云
        • 天翼云APP
        • 服务案例
        • 新闻资讯
        • 联系我们
        热门产品
        • 云电脑
        • 弹性云主机
        • 云电脑政企版
        • 天翼云手机
        • 云数据库
        • 对象存储
        • 云硬盘
        • Web应用防火墙
        • 服务器安全卫士
        • CDN加速
        热门推荐
        • 云服务备份
        • 边缘安全加速平台
        • 全站加速
        • 安全加速
        • 云服务器
        • 云主机
        • 智能边缘云
        • 应用编排服务
        • 微服务引擎
        • 共享流量包
        更多推荐
        • web应用防火墙
        • 密钥管理
        • 等保咨询
        • 安全专区
        • 应用运维管理
        • 云日志服务
        • 文档数据库服务
        • 云搜索服务
        • 数据湖探索
        • 数据仓库服务
        友情链接
        • 中国电信集团
        • 189邮箱
        • 天翼企业云盘
        • 天翼云盘
        ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
        公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
        • 用户协议
        • 隐私政策
        • 个人信息保护
        • 法律声明
        备案 京公网安备11010802043424号 京ICP备 2021034386号