SpringBoot + VUE 解决 后台的 session 的 null 的问题

后台管理系统Springboot+Shiro+JWT+Vue 项目开发中,后台系统尤为重要,最近就想搞一套能拿来直接使用的后台管理系统。 框架: Shiro,Shiro作为安全框架,实现登录、登出、身份验证、授权、会话管理。 JWT,Json Web Token负责访问接口时的验证。 Vue,前端框架,因为本身不是前端开发,所以Clone了某位高人在github上的模版。写的非常好,简单易用。https://github.com/PanJiaChen/vue-admin-template 前端代码就是照葫芦画瓢,不过很多地方也googl 阅读详情
问题原因

前端跨域访问后端接口, 在浏览器的安全策略下默认是不携带cookie的, 所以每次请求都开启了一次新的会话.
在后台打印sessionID我们会发现, 每次请求的sessionID都是不同的, 既然每次请求都是一个新的会话, 那我们去获取session的时候自然就是null了.

前端处理
  • 在 vue 中所有引入 axios 的地方添加如下代码,允许跨域携带cookie
import axios from 'axios'
axios.defaults.withCredentials = true     // 添加代码:允许跨域携带cookie	
后端处理
  • 新建 WebAppConfig ,实现 WebMvcConfigurer 接口,允许前端跨域
public class WebAppConfig implements WebMvcConfigurer {
    //前端跨域
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")//设置允许跨域的路径
                .allowedOrigins("*")//设置允许跨域请求的域名
                .allowCredentials(true)//是否允许证书 不再默认开启
                .allowedMethods("GET", "POST", "PUT", "DELETE")//设置允许的方法
                .maxAge(3600);//跨域允许时间
    }
}

问题解决, 重启工程后我们再次打印每次请求的sessionID就会发现sessionID是一致的, 当然也就可以获取我们存入session的内容了.

SpringBoot登录认证实战:基于Session与Spring Security的完整实现 用户认证与授权是Web应用安全的核心基础,它决定了用户身份的识别与访问权限的控制。其核心原理在于验证用户凭证并建立可信的会话状态。在技术实现上,Spring Security作为Java生态中权威的安全框架,通过过滤器链机制,为开发者提供了一套声明式的安全解决方案,极大地简化了密码加密、权限控制、CSRF防护等复杂功能的开发。这套方案尤其适用于传统的单体Web应用,能够有效保障业务系统的安全基线。本文聚焦于SpringBoot项目中经典的Session-Cookie认证模式,详细解析了如何整合Spring 阅读详情

相关推荐

秋叶ComfyUI整合包:一键部署AI绘画工作流,解决环境配置难题

在AI绘画和生成式AI领域,Stable Diffusion作为开源的扩散模型,为图像生成提供了强大的技术基础。其核心原理是通过学习数据分布,对随机噪声进行逐步去噪,最终生成高质量的图像。这项技术的价值在于极大地降低了专业图像创作的门槛,并推动了AIGC(人工智能生成内容)在艺术设计、游戏开发、广告营销等场景的广泛应用。然而,其典型工作流实现工具ComfyUI,在实际部署中常因Python环境、PyTorch版本与CUDA驱动之间的复杂依赖关系而受阻,尤其是面对NVIDIA 30系、40系及未来50系等不同

优快云头条 670

springboot整合shiro无法获取当前用户session中值为null

maven包 <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> <version>1.5.3</version> </dependency> 实现AuthorizingRealm接口 //校验权限

iijik55的博客 1264

激光定位算法竞技场:hdl_localization与Cartographer/AMCL的横向技术解剖

本文深入对比了hdl_localization、Cartographer和AMCL三种激光定位算法的技术原理与性能表现。通过UKF-NDT融合、图优化和粒子滤波等核心技术,分析了各算法在结构化环境、动态环境和大尺度场景下的适应性。实验数据表明,Cartographer在全局一致性上表现最优,而AMCL在动态环境中更具鲁棒性。文章还提供了算法选型指南和参数调优技巧,为工程实践提供参考。

weixin_29062865的博客 367

Springboot+vue 前后端分离出现后端session的获取为null

Springboot+vue 前后端分离出现后端校验验证码时出现获取session中的值为null的情况。 最近在写前后端分离的项目时,使用到后端验证码的情况。一般是在前端先get请求获取后端图片,并且将生成的验证存储到session中,然后前端再post请求登陆时,将form表单中的验证码传递到后端,然后后端再取出session中的验证码进行比较验证,但是由于跨域问题,在最后一步验证时出现取出的session值为null。在看了几篇博文后得出以下结论: 参考博文 https://blog.youkuaiyun.com

qq_44874270的博客 3874

无人机飞控传感器全解析:从IMU到光流传感器的实战应用

本文深入解析了无人机飞控系统的核心传感器,从IMU、气压计、磁力计到光流传感器,详细阐述了其工作原理、数据融合策略及常见挑战。结合ICF5、Pixhawk 6C等主流飞控硬件,提供了从传感器校准、滤波器调优到应对室内光流定位、强磁干扰等实战场景的系统性优化指南,帮助开发者突破飞控“黑箱”,实现更稳定、可靠的飞行控制。

weixin_28396629的博客 169

谷歌(Google) Pixel 8/9 Pro(xl)如何获取 root 权限

谷歌(Google)Pixel8/9Pro(xl)等系列手机破解后,会在你的init_boot.img同路径生成一个magisk_patched.img,把这个文件拷贝到adb目录下,稍后还得把它刷回手机,这样手机才能获得Root权限,因为安卓14、15以后的内核结构调整,和Pixel7及以下的6、5、4、3、2等系列手机破解稍微不一致。因为ROOT权限的获取,需要使用ROM中的内核文件,个人强烈建议在官网下载ROM,直接刷最新版,其他地方的ROM如果没有校验码,请自行斟酌是否使用。

bugsycrack的博客 3490

解决Vue前端 请求 SpringBoot 后台跨域 session 为空的问题!!!(踩坑经验)

前后端分离,就没有会话(session)这个概念了!!! 每次请求都是一个新的会话。 业务场景 在写登陆接口的时候,用户登陆验证完用户信息后使用jwt生成token,将token 存入session并返回给前端,让前端在后面的请求过程(请求头中)都带着token来请求接口。 而我将使用过滤器拦截所有的请求,获取前端传过来的token,进行验证(1,验证token是否有效,2,验证token 是否与session 中的token 一致)。 这时问题就出现了,获取session 中 的token 为 null。

weixin_44665047的博客 2492

Investigating Bi-Level Optimization for Learning and Vision from a Unified Perspective: A Survey and

文章首先从双层优化的角度统一表示了超参数优化、多任务和元学习等复杂学习和视觉问题,建立了一个基于最佳响应的单层重构和一个统一的算法框架,来制定一个基于梯度的双层优化方法,最后讨论了该框架的潜力和未来研究方向。...

dawnyi_yang的博客 1110

springboot学习系列:应用集群化之后,session获取值可能会出现为空的情况之解决方案

微服务环境下,将一个应用部署为集群式,然后应用内部根据session存取值,会出现问题。因为请求会随机发送到其中几台的机器。本篇博客主要是为了解决该问题。

枫夜 1777

当传统CFD遇上AI:PINN如何帮我们省下90%的仿真计算时间?

本文探讨了物理信息神经网络(PINN)在计算流体力学(CFD)中的应用,如何通过无网格方法节省90%的仿真计算时间。PINN将物理定律编码到神经网络中,显著减少传统CFD中的网格生成和计算时间,同时保持高精度。文章还对比了PINN与传统方法的性能,并讨论了其独特优势和当前局限。

weixin_32678995的博客 321

边缘设备部署全攻略——ARM架构设备的OpenClaw优化(2026实测)

本文详细介绍了ARM架构设备上OpenClaw的部署与优化方案。针对边缘计算场景,文章系统分析了三类ARM设备:嵌入式设备(如Raspberry Pi 4、Jetson Nano)、工业设备(如BeagleBone、i.MX8M Plus)和服务器设备(如Marvell Armada、AWS Graviton3),并提供了详细的性能与功耗对比数据。在系统配置方面,重点推荐了Ubuntu ARM、Debian ARM和OpenWRT三种操作系统,包括内核版本、必备软件包和针对边缘环境的优化策略(如CPU频率调

博客 410

spring Boot 中session取值null问题

在维护一个老项目时候发现,该项目业务请求,大多是基于session里取存储的用户信息,作为业务操作流程,必要条件之一。 出现了一问题,在特别多的请求下,从session取值用户信息null的问题,时有出现。查找日志,信息,定位出现取值为null的请求,均未查找到原因,因正常的请求过来,也会时候发生取值null情况。 排查原因,我这边的问题是spring Boot版本的问题 版本是2.1.10 将配置文件内的session时效配置server.servl server.servlet.session.

oschina_40188932的博客 1879

Mamba-YOLOv8深度解析:基于状态空间模型的下一代目标检测架构(含完整代码与实战部署)文末含资料链接!

通过本文的完整指南,您将掌握从理论创新到工程落地的全流程技术细节。立即动手实践,开启目标检测的新纪元!

FJN110的博客 519

vue前后分离session实现_前后端分离 vue+springboot 跨域 session+cookie失效问题

环境:前端 vue ip地址:192.168.1.205后端 springboot2.0 ip地址:192.168.1.217主要开发后端。问题:首先登陆成功时将用户存在session中,后续请求在将用户从session中取出检查。后续请求取出的用户都为null。解决过程:首先发现sessionID不一致,导致每一次都是新的会话,当然不可能存在用户了。然后发现cookie浏览器不能自动保存,...

weixin_39620118的博客 668

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

spring boot获取session的值为null问题

问题描述: 我在登陆的时候,登陆成功后将name存进了session,然后在获取个人信息时取出session里的name的值为null. 在login里存session: 在getUserInfo里获取session的name: 控制台结果: 直接原因: 两个session不同,即session.getId()的值不同 根本原因: 涉及到前后端跨域问题 解决方案: 本人前端是vue项目,...

乔路非 1万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

vue前后分离session实现_解决vue+springboot前后端分离项目,前端跨域访问sessionID不一致导致的session为null问题...

问题: 前端跨域访问后端接口, 在浏览器的安全策略下默认是不携带cookie的, 所以每次请求都开启了一次新的会话.在后台打印sessionID我们会发现, 每次请求的sessionID都是不同的, 既然每次请求都是一个新的会话, 那我们去获取session的时候自然就是null了.解决办法如下:环境:vue 2.0springboot 2.1.6一、前端部分1. 在vue引入axios的位置添...

weixin_39896617的博客 1000

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

请求的session为null 或 每次请求的session都不同的问题。

在项目开发中,使用了session保存邮箱验证的验证码,当使用swagger测试时没有问题,但是vue项目中测试的时候,明明验证码都发送成功了,也填写了发送过来的验证码,却返回“验证码未发送”。这是验证验证码的代码,返回“验证码未发送”,则可以知道,该浏览器在服务器的session为null,即传过来的sessionid为空,因为服务器要根据请求cookie中的sessionid找服务器中对应的session。可是,......

Xiaofeng_Lu__的博客 5676

解决vue+springboot前后端分离项目,前端跨域访问sessionID不一致导致的session为null问题

解决vue+springboot前后端分离项目,前端跨域访问sessionID不一致导致的session为null问题

w36680130的博客 1051

【SpringBoot框架篇】19.集成spring-session利用redis来实现session共享

集成spring-session利用redis来实现session共享

皓亮君的博客 3600

前端跨域访问sessionID不一致导致的session为null问题

问题 登录页面实现验证码功能,后台在生成验证码的同时,将验证码存到session中。前端通过post请求登录,后台可以接收到前端传来的用户名、密码、验证码的数据,但是在后端验证码匹配的时候,获取的session为null。 问题详情: 1、CaptchaController中,在生成验证码的同时,将验证码存到session中。 2、前端发起登录请求 3、后端对前端传来的验证码进行校验。 4、报错: servlet.service() for servlet [dispatcherservlet] in

qq_43665890的博客 2379

前后端分离的项目,前端vue的session为null的解决方法

我在写一个管理系统用户登录的功能,在输入完用户名和密码之后,需要再输入验证码进行校验,输入正确则登录成功,进入系统首页。我写的逻辑是把验证码存入到session中,从session拿到正确的验证码数值与输入的验证码做比较。这个在接口文档上测是可以成功,但是放在vue中就session是null,拿不到。日志是这样打印的:所以问题应该是跨域,导致前端拿不到session。

shgzzd的博客 901

spring boot项目中,在其中一个方法中向Session中存入对象,在另一个方法中取出为null的问题

出问题时:此时,我想先把注册功能的验证码,先存入,Session域对象中,等用户点击注册按钮时,再取出Session中存入的验证码与浏览器的请求中传入的验证码,作比较,来验证,用户输入的验证是否正确,但在此两次请求中的方法的执行过程,先前存入Session对象中值,在第二次请求中,从Session中取时,却为null。 第一次请求,调用的方法 @RequestMapping("/sendMail") public String sendMail(User user,HttpSession session)

norang的博客 1913

springboot+vue跨域问题

vue main.js axios.defaults.withCredentials = true springboot 新建CorsConfig.java文件 import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.cors.CorsConfiguration; i

weixin_43276017的博客 191

SpringBoot+Vue 前后端分离跨域导致session不一致的问题

最终发现是localhost和127.0.0.1的问题,虽然你用localhost时会主动转到127.0.0.1,但是不代表两者就是同一个玩意,而我前后端一个用127.0.0.1 一个用localhost,这就使得session不一致了。网上有很多解决方案,有前端的后端的,作为一个菜鸟我各种都用了,我也不知道是谁起作用的。我验证码的值存放在session中,然后验证时获取session中存放的值和输入的比较,很简单的逻辑。跨域解决后,能用功能了,很可惜,然后开始弄登录验证码。首先浏览器它有个同源策略。

weixin_46766427的博客 1068

springboot+vue前后端分离session跨域每次id不同

今天基于springboot+vue写了一个基本的前后端分离项目,但是当我从后端传入session时,我在前端取出的值都是null,于是我开始排查bug,首先我在后端的方法中输出session,看看当前方法session是否已经存入了值,此时发现,当前方法有值,但是其他的方法时没有值的,然后我突然意识到,在vue项目中axios请求后端api的时候,每一次都是开启了一个新的会话,也就是说取到的session不是同一个。 于是我通过System.out.println(sess...

qq_28174545的博客 2848

SpringBoot + Vue 前后端分离中session取值为null问题

SpringBoot前后端分离项目中,session取值为null问题的解决

weixin_47208494的博客 589
上一篇: 解决VSCODE安装GO插件失败问题
下一篇: Js promise 的使用
ErikChan.hk
博客等级 码龄12年 107粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值