Shiro之标签

SpringBoot整合Shiro之Thymeleaf使用Shiro标签 目录`thymeleaf` 模板引擎使用 `shiro` 标签 thymeleaf 模板引擎使用 shiro 标签 我们紧接着 上一篇 文章,我们使用账号 jack 和账号 Tom 来分别登录,在上一篇文章测试中可以看到,这两个账号无论哪一个登录,首页页面都会显示 add 页面和 update 页面两个超链接,而对于这两个账号来说,一个拥有访问 add 页面的权限,一个拥有访问 update 页面的权限。那么问题来了,如何才能根据对应用户的身份角色来显示对应的页面呢?这就要使用 shiro 标签了 .. 阅读详情

在使用Shiro标签库前,首先需要在JSP引入Shiro标签:

<%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>
  • guest标签 :验证当前用户是否为“访客”,即未认证(包含未记住)的用户
<shiro:guest> 

    Hi there!  Please <a href="login.jsp">Login</a> or <a href="signup.jsp">Signup</a> today! 

</shiro:guest>
  • user标签 :认证通过或已记住的用户
<shiro:user> 

    Welcome back John!  Not John? Click <a href="login.jsp">here<a> to login. 

</shiro:user>
  • authenticated标签 :已认证通过的用户。不包含已记住的用户,这是与user标签的区别所在
<shiro:authenticated> 

    <a href="updateAccount.jsp">Update your contact information</a>. 

</shiro:authenticated>
  • notAuthenticated标签 :未认证通过用户,与authenticated标签相对应。与guest标签的区别是,该标签包含已记住用户
<shiro:notAuthenticated> 

    Please <a href="login.jsp">login</a> in order to update your credit card information. 

</shiro:notAuthenticated>
  • principal 标签 :输出当前用户信息,通常为登录帐号信息
Hello, <shiro:principal/>, how are you today?
  • hasRole标签 :验证当前用户是否属于该角色
<shiro:hasRole name="administrator"> 

    <a href="admin.jsp">Administer the system</a> 

</shiro:hasRole>
  • lacksRole标签 :与hasRole标签逻辑相反,当用户不属于该角色时验证通过
<shiro:lacksRole name="administrator"> 

    Sorry, you are not allowed to administer the system. 

</shiro:lacksRole>
  • hasAnyRole标签 :验证当前用户是否属于以下任意一个角色
<shiro:hasAnyRoles name="developer, project manager, administrator"> 

    You are either a developer, project manager, or administrator. 

</shiro:hasAnyRoles>
  • hasPermission标签 :验证当前用户是否拥有指定权限
<shiro:hasPermission name="user:create"> 

    <a href="createUser.jsp">Create a new User</a> 

</shiro:hasPermission>
  • lacksPermission标签 :与hasPermission标签逻辑相反,当前用户没有制定权限时,验证通过
<shiro:lacksPermission name="user:create"> 

    <a href="createUser.jsp">Create a new User</a> 

</shiro:lacksPermission>
JS中处理Shiro的权限标签问题 JSP中直接引用Shiro标签比较简单可以参考JSP / GSP 标签库-Shiro权限学习1:http://blog.youkuaiyun.com/ahou2468/article/details/71130582 JS中引用Shiro的标签不起作用的问题解决方法: 1.第一种情况假如js中生成标签代码是固定死的解决起来比较容易,直接在需要权限判断标签前和后加上权限控制标签,即可以起作用 阅读详情

相关推荐

shiro教程10(freemaker使用shiro标签)

当我们需要将页面中一些没有权限的标签给隐藏掉的时候,shiro默认提供了对jsp的支持,但是我们有些时候前端模板引擎使用的是freemarker,这时我们就需要专门来设置下了。 引入相关依赖 &amp;amp;lt;dependency&amp;amp;gt; &amp;amp;lt;groupId&amp;amp;gt;net.mingsoft&amp;amp;lt;/groupId&amp;amp;gt; &amp;amp;lt;a

波波烤鸭的博客 3216

【Shiro】Permission字符串及认证授权的相关内容

粗颗粒:对资源类型的管理称为粗颗粒度权限控制,即只控制到菜单、按钮、方法。细颗粒:对资源实例的控制称为细颗粒度权限管理,即控制到数据级别的权限。

kevin的博客 1618

用url作为shiro的permission的范例

是用菜单URL作为shiro的permission来管理,每一个用户分配其角色(可以有多个角色),这个系统要求必须登录才能使用,如果是对外的公开项目就不合适,shiro一般也是用在需要控制权限的项目. 每个角色分配其可以访问的url,所以当一个用户登录的时候,他会有可以访问的url的清单,这样我们就可以利用动态生成菜单和在页面上配置的方式让其只能看见自己可以访问的菜单,用户登录的时候只能看到他有权限的菜单,只要能看到的菜单或功能,都是有权限访问的. 项目用到spring-boot和mybatis。需要在test数据库里运行代码里的sql脚本,默认登录用户hao或yiqian,密码都是12345

Shiro-web相关认证授权

身份认证 在 shiro 中,用户需要提供 principals (身份)和 credentials(证明)给 shiro,从而应用能验证用户身份: • 身份验证:一般需要提供如身份 ID 等一些标识信息来表明登录者的身 份,如提供 email,用户名/密码来证明。 在 shiro 中,用户需要提供 principals (身份)和 credentials(证 明)给 shiro,从而应用能验证用户身份: • principals:身份,即主体的标识属性,可以是...

wxd_1024的博客 551

Windows 10/11 下用 Docker 一键部署 CVAT 标注工具(附 WSL2 配置指南)

本文详细指导如何在Windows 10/11系统上,通过配置WSL2和Docker Desktop,实现CVAT标注工具的一键部署。内容涵盖从环境准备、Docker安装、CVAT服务启动到性能优化与安全配置的全流程,为计算机视觉开发者提供稳定高效的本地标注平台解决方案。

weixin_28839601的博客 462

学习C++的递归函数(包含汉诺塔讲解)

简单来讲,递归函数就是函数本身自己调用自己,那么函数又是什么呢?#include <stdio.h> //这行是头文件,不同的头文件可以用不同的函数int main() //这里就是一个main函数//这里是你要编写程序的内容return 0;(这是个小细节如下)所以我们平时用来练习的就是一个main函数,而且是一个整型类型的函数,而这也是最后一句话为什么要加一句 return 0;了,因为它最后要返回整数类型,其它整数也可以,但是大家规定为0,这是C++自带的函数。

2302_81032013的博客 2594

【Shiro】Shiro从小白到大神(三)-权限认证(授权)

本节讲权限认证,也就是授权 基于角色的访问控制和基于权限的访问控制的小实例 以及注解式授权和JSP标签授权详解 权限认证 权限认证核心要素 权限认证,也就是访问控制,即在应用中控制谁能访问哪些资源 在权限认证中,最核心的三个要素是:权限,角色和用户 (资源也算一个要素,但不是最核心的) 权限,即操作资源的 ...

weixin_34311757的博客 718

添加odbc数据源时的一些问题和解决办法

pl/sql

Mr_Syh的博客 9642

shiro教程(3)-shiro授权

1shiro授权 1.1授权流程 1.2授权方式 Shiro 支持三种方式的授权: 1、编程式:通过写if/else 授权代码块完成: Subject subject = SecurityUtils.getSubject(); if(subject.hasRole(“admin”)) { //有权限 } else { //无权限 } 2、注解式:通过

好好学java 2941

高通CamX架构解析(一)——核心组件与数据流设计

本文深入解析高通CamX相机架构的核心组件与数据流设计。CamX采用模块化与数据驱动思想,将复杂处理流程拆解为Node、Pipeline、Session等独立组件,并通过CHI层实现硬件接口与定制功能的分离。文章详细阐述了从请求下发到结果返回的完整数据流,并提供了实用的调试与分析指南,帮助开发者理解这一高效、灵活的现代相机架构。

k8l9m0n的博客 235

运动目标成像必学:5分钟搞懂keystone变换原理与避坑指南

本文深入浅出地解析了雷达信号处理中的Keystone变换原理,它是解决运动目标距离徙动问题的关键技术。文章通过直观比喻和简化公式,阐述了该变换如何通过变量代换实现距离与慢时间的解耦合,将倾斜轨迹“掰直”,从而提升成像与检测性能。同时,文中重点指出了实际应用中关于大速度场景、插值误差、多目标处理及高阶运动补偿等关键避坑点,为工程实践提供了宝贵指南。

ios99的博客 403

shiro的@RequiresPermissions,@RequiresRoles解析流程

全网最新讲解shiro的@RequiresPermissions,@RequiresRoles的解析流程,绝对对你理解这两个验证流程大有脾益。

qq_61592687的博客 7238

52-Halcon-- smooth_object_model_3d函数功能(滑处理3D对象模型)

Halcon中smooth_object_model_3d算子详解 该算子用于3D模型平滑处理,提供三种算法:'laplacian'(快速去噪)、'taubin'(高质量防收缩)和'low_pass'(频域滤波)。核心参数包括迭代次数(默认5)、平滑强度(0-1)和边缘保护选项。典型应用包括扫描数据去噪、CAD模型光顺和逆向工程优化。支持自适应平滑、结合模型简化等高级技巧,并可通过分块处理优化大型模型性能。参数组合需根据具体场景选择,如快速去噪推荐拉普拉斯方法(5次迭代,强度0.3),特征保持推荐低通滤波(

weixin_45590420的博客 871

Shiro学习(六)--Shiro标签

一、 Shiro标签 前面我们剖析了Shiro的授权流程,并且编写了授权的小实例。下面我们来探讨一下Shiro的标签。 Shiro提供了JSTL标签用于在JSP页面进行权限控制,如根据登录用户显示相应的页面按钮。 Shiro提供的标签有如下几种: (1)guest标签:用户没有身份验证时显示相应信息,即游客访问信息。 例如: <shiro:guest> 欢迎游客访问,<a href="login.jsp">登录</a> </shiro

qq_40616823的博客 1399

Python在振动信号处理中的应用(一):振动信号消除多项式趋势项

文章目录一、概述二、最小二乘法去除趋势项原理三、python模块介绍3.1 scikitlearn简介(1)转化器(Transformer)(2)估计器(Estimator)3.2 线性回归LinearRegression3.3 多项式PolynomialFeatures3.4 工作流Pipeline四、python代码实现4.1 构造模拟信号4.2 编写去除趋势项主代码4.3 展示算法效果五、TIPS 一、概述   在振动测试过程中,传感器或采集设备由于自身性能问题或受环境干扰(如温度、供电等影响),容易

白银时代的博客 8578

拆解全球18大“支付清算”体系:CLS、中国、美国、欧洲、日本、mBridge...

拆解全球18大“支付清算”体系:CLS、中国、美国、欧洲、日本、mBridge...

银行信息系统应用架构详解 883

freemarker集成shiro标签

最近在做权限控制的时候用到了shiro,可惜一窍不通,学了一段时间之后,在freemarker装饰器中集成shiro标签时遇到了一点问题,网上资料都是在普通页面实现,特此记录下,如有理解不对的地方还请各位指正。

欢乐码农凌云兜儿 1万+

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

shiro jsp 标签

spring-shiro.xml 1 2 3 /admin/repairType/index = roles["ROLE_ADMIN"] /admin/user=roles["ROLE_ADMIN"] /admin/complaint/list= roles["ROLE_SERVICE,ROLE_ADMIN"]

花前月下人 6122

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Shiro的JSP标签

前言 Shiro 提供了JSTL标签用于在JSP页面进行权限控制,如根据登录用户显示相应的页 面按钮。 标签的使用 导入标签库 <%@taglib prefix="shiro" uri="http://shiro.apache.org/tags" %> 标签库定义在shiro-web.jar包下的META-INF/shiro.tld 中定义。导入后即可使用一下标签 guest标签 &...

chenjia的博客 306

深度学习工具包 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")

shiro 之 Shiro 标签

shiro 之 Shiro 标签本节我们将学习一下Shiro 的标签。Shiro 提供了 JSTL 标签用于在 JSP 页面进行权限控制,如根据登录用户显示相应的页面按钮。在使用Shiro 的标签之前我们需要引入Shiro Tag:<%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags"%> guest 标签:用户没有身份验证时显示相应

Dusty丶one的博客 459

Shiro标签

在使用Shiro标签库前,首先需要在JSP引入shiro标签:<%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>  1、介绍Shiro的标签guest标签 :验证当前用户是否为“访客”,即未认证(包含未记住)的用户。<shiro:guest>Hi there! Please <a ...

WGH100817的博客 109

【shiro】解决页面上使用shiro标签无效问题

场景: 今天在做页面shiro标签权限控制时,意外发现,所有都无效,检查数据库权限设置及对当前账号的授权,都没问题,而且在对应的 Realm 中 的 doGetAuthorizationInfo() 方法中断点,发现刷新页面,根本就不会进入当前鉴权方法中,经过排查,发现是 shiroConfig中忘记开启页面上使用 Shiro 标签,添加 ShiroDialect 方法后就可以了...

_修铁路的、的博客 5111

常用的shiro标签

guest标签 用户没有身份验证时显示相应信息,即游客访问信息。 <shiro:guest> </shiro:guest> user标签 用户已经身份验证/记住我登录后显示相应的信息。 <shiro:user>   </shiro:user> authenticated标签 用户已经身份验证通过,即Subject.login登录成功,不是记住我登录的。 <shiro:authenticated>   </shiro:authentica

哈 865

Shiro 权限标签

Shiro 权限标签:   导入标签库: <%@taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>   权限标签: guest标签   <shiro:guest>   </shiro:guest>   用户没有身份验证时显示相应信息,即游客访问信息。 user标签   <sh...

qq_42191775的博客 226

Shiro教程(九)Shiro JSP标签的使用。

Shiro 提供了 JSP 的一套 JSTL 标签,用于做 JSP 页面做权限控制的。可以控制一些按钮和一些超链接,或者一些显示内容。 Freemarker Shiro标签讲解:https://blog.youkuaiyun.com/baidu_37366055/article/details/88072120 其实标签都是和Freemarker Shiro标签对应的,只不过是把...

baidu_37366055的博客 3737

使用shiro标签遇到的坑

1、前言 使用shiro框架做权限控制是不错的选择,在使用shiro标签的过程中,是否会遇到一些坑呢。恰好笔者遇到了,在此记录一下。 2、shiro标签坑的描述 标签: <shiro:haspermission name="你的权限"></shiro:haspermission> 当使用的标签具有层级关系的时候,就有可能掉坑里,并且出不来。 例如: 第一层级...

static_coder的博客 3526
上一篇: Shiro之权限注解
下一篇: Shiro之自定义权限标签的坑
章 鱼
博客等级 码龄10年 203粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值