spring-security 项目实战(一)个人健康档案

基于Java+SpringBoot 3 + Vue 3 + Vite构建现代化个人健康档案管理系统:全栈技术深度解析与实践 el-button size="small" type="danger" @click="handleDelete(scope.row.id)">删除</el-button><el-button type="primary" @click="showDialog = true" :icon="Plus">新增记录</el-button><el-table-column prop="title" label="标题" width="180"></el-table-column> 阅读详情

项目来源于《Spring Security原理与实战》,这本书对spring security介绍比较详细的,很多原理性的内容讲解的比较清晰。

项目说明

项目地址

https://gitee.com/3281328128/spring-security-basic
master 分支的代码原来书里面的代码,boot_3.2.2 分支是修改之后的代码。项目来源于书籍的第5章-实现自定义的用户认证体系,原来的项目用的spring security版本比较低,改成了 spring-security-6.2.1 版本的,该项目前后端不分离的,基于 session 来认证用户是否登录

框架信息

boot_3.2.2 分支使用的框架信息

名称版本信息说明
JDK17LTS 长期支持版本
spring-boot-starter-web3.2.2内嵌web服务器, jar包启动
spring-boot-starter-security3.2.2安全框架
mybatis-plus-spring-boot3-starter3.5.5ORM框架
mybatis-plus-generator3.5.5根据数据表自动生成代码
spring-boot-starter-thymeleaf3.2.2处理静态资源,模板数据填充

代码分析

启动项目之后,访问 http://localhost:8080/main地址,会重定向到默认登录页, 登录认证之后会重定向到main页面
在这里插入图片描述
重定向到默认页面的过程可以查看之前的博客spring-security 默认登录页面(一)。整个过程还有几个问题需要分析

  1. 默认登录页登录接口的执行逻辑
  2. 登录认证成功之后重定向到main页面过程

配置类解析

配置类代码如下

package com.lagou.springsecurity.config;

import com.lagou.springsecurity.service.AuthenticationProviderService;
import com.lagou.springsecurity.service.CustomUserDetailsService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;

import org.springframework.security.web.SecurityFilterChain;

@Configuration
public class SecurityConfig {

    private AuthenticationProviderService authenticationProvider;

    private CustomUserDetailsService customUserDetailsService;

    public SecurityConfig(AuthenticationProviderService authenticationProvider,
                          CustomUserDetailsService customUserDetailsService) {
        this.authenticationProvider = authenticationProvider;
        this.customUserDetailsService = customUserDetailsService;
    }

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http.formLogin(httpSecurityFormLoginConfigurer ->
                httpSecurityFormLoginConfigurer.defaultSuccessUrl("/main", true));
        http.authorizeHttpRequests((authorizeHttpRequests) ->
                authorizeHttpRequests.anyRequest().authenticated());
        http.authenticationProvider(authenticationProvider);
        http.userDetailsService(customUserDetailsService);
        return http.build();
    }
}
  1. http.formLogin(httpSecurityFormLoginConfigurer -> httpSecurityFormLoginConfigurer.defaultSuccessUrl("/main", true)); 配置登录成功之后的跳转页面,本章后续会分析这个过程
  2. http.authorizeHttpRequests((authorizeHttpRequests) -> authorizeHttpRequests.anyRequest().authenticated()); 配置所有的地址都需要认证,这个配置会在AuthorizationFilter 中读取到,与当前的用户权限对比,看能否访问对应的资源,如果不能抛出异常给ExceptionTranslationFilter 过滤器处理
  3. http.authenticationProvider(authenticationProvider) 配置自定义的登录验证处理逻辑,验证用户名、密码,设置用户权限等
  4. http.userDetailsService(customUserDetailsService) 配置自定义的用户信息接口,根据用户名加载用户信息

默认登录页登录接口执行逻辑

  1. 在 org.springframework.security.web.FilterChainProxy.VirtualFilterChain#doFilter 方法中增加断点,方便调试每个过滤器
    在这里插入图片描述
    可以看到当前项目配置的过滤器详情
    在这里插入图片描述

登录认证成功之后重定向到main页面过程

未登录之前访问 /main

  1. org.springframework.security.web.savedrequest.RequestCacheAwareFilter 过滤器会将请求缓存
  2. org.springframework.security.web.access.intercept.AuthorizationFilter 过滤去认证抛出异常
    在这里插入图片描述
  3. 异常处理过滤器 org.springframework.security.web.access.ExceptionTranslationFilter 处理异常
    在这里插入图片描述
    在这里插入图片描述
    生成重定向url http://localhost:8080/login
    在这里插入图片描述

生成默认登录页

https://blog.youkuaiyun.com/modelmd/article/details/135982664
在这里插入图片描述

点击登录

点击登录会调用 /login 接口,在 org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter 中进行用户名、密码的验证,UsernamePasswordAuthenticationFilter extends AbstractAuthenticationProcessingFilter,大多数处理流程在 AbstractAuthenticationProcessingFilter中执行
在这里插入图片描述
流程图如下

Created with Raphaël 2.3.0 开始 用户名、密码认证 判断请求地址是否需要认证? 执行认证流程 用户名密码校验成功? 修改会话ID、CSRF token 设置认证成功,重定向到登录成功页 执行结束 return ; 结束 yes no yes no
  1. 用户名密码校验详细过程解析
    在方法 org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter#attemptAuthentication 执行用户认证的逻辑
    在这里插入图片描述
    从请求头中获取用户名、密码
    在这里插入图片描述
    AuthenticationManager 类负责执行用户认证的逻辑,具体实现逻辑在类 org.springframework.security.authentication.ProviderManager
    在这里插入图片描述
    核心认证逻辑方法org.springframework.security.authentication.ProviderManager#authenticate
    在这里插入图片描述
    最终会进入用户自定义的用户名密码逻辑,在认证方法中可以将用户的权限加载到认证对象,这样AuthorizationFilter 就可以验证用户否有权限访问对应的url
    在这里插入图片描述
    在这里插入图片描述

  2. 修改会话ID、CSRF token
    在这里插入图片描述
    org.springframework.security.web.authentication.session.ChangeSessionIdAuthenticationStrategy修改请求的 sessionId, 防止固定会话攻击,org.springframework.security.web.csrf.CsrfAuthenticationStrategy更新seesion对应的 CSRF token

  3. 设置认证成功,重定向到登录成功页
    org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter#successfulAuthentication方法执行认证成功之后的相关逻辑。安全上下文SecurityContext设置认证成功的对象,安全上下文基于ThreadLocal实现的,在同一线程的其它filter中可以比较容易获取到认证成功的对象数据
    在这里插入图片描述
    在SecurityContext中设置上下文对象之后,也会在 httpSeesion、httpRequest属性中存储认证对象,可以查看 org.springframework.security.web.context.SecurityContextRepository#saveContext方法。HttpSessionSecurityContextRepository将认证对象存储在 seesion ,RequestAttributeSecurityContextRepository将认证对象存储在http请求头属性
    在这里插入图片描述
    存储在 session的 key 默认值是 SPRING_SECURITY_CONTEXT
    在这里插入图片描述
    存储在 httpRequest 属性中的 key 默认值是 org.springframework.security.web.context.RequestAttributeSecurityContextRepository.SPRING_SECURITY_CONTEXT
    在这里插入图片描述
    重定向到缓存页。首先从session中获取缓存信息,然后重定向到具体的地址,可以查看org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler#onAuthenticationSuccess方法
    在这里插入图片描述
    从session缓存中获取 url
    在这里插入图片描述
    session缓存中未获取到 url, 去目标url处理器中查找 org.springframework.security.web.authentication.AbstractAuthenticationTargetUrlRequestHandler#handle
    在这里插入图片描述

AbstractAuthenticationTargetUrlRequestHandler中目标defaultTargetUrl如何初始化的?
在配置类中初始化配置登录成功的地址
在这里插入图片描述

登录之后访问 /main

执行流程

  1. AnonymousAuthenticationFilter 中设置认证对象
    在这里插入图片描述

  2. 认证过滤器AuthorizationFilter 中会获取 session 中的已认证的用户
    在这里插入图片描述
    校验用户权限 org.springframework.security.authorization.AuthenticatedAuthorizationManager#check
    在这里插入图片描述
    获取已认证用户对象,org.springframework.security.web.access.intercept.AuthorizationFilter#getAuthentication
    在这里插入图片描述
    从session 中获取认证对象 org.springframework.security.web.context.HttpSessionSecurityContextRepository#loadDeferredContext,
    org.springframework.security.web.context.HttpSessionSecurityContextRepository#readSecurityContextFromSession
    在这里插入图片描述
    在这里插入图片描述
    获取之前登录的时候设置到 session 中的用户,属性key 和之前登录一致的 SPRING_SECURITY_CONTEXT
    在这里插入图片描述

清空认证信息

如果将cookie 清除之后,页面就会重新跳转到登录页

  1. 清除 cookie,在开发者工具中,删除对应的 session
    在这里插入图片描述
  2. 访问 http://localhost:8080/main 地址,丛session中获取认证信息失败,会重定向到登录页
    在这里插入图片描述
    在这里插入图片描述
基于SpringBoot的女性健康管理系统设计与实现 本文介绍了一个基于Spring Boot和Vue.js的女性健康管理系统。系统采用Mybatis Plus框架简化数据库操作,提供健康服务、健康资讯、健康档案等功能,并支持用户留言互动。管理员模块可管理用户信息,用户模块包含注册认证、个性化健康建议、风险评估等功能。系统具有响应式前端设计、数据高效管理等特点,未来计划拓展移动端和智能设备集成。该平台旨在帮助女性科学管理健康,提升生活质量。 阅读详情

相关推荐

Chromatix_AEC—深入解析曝光表配置与传感器参数计算

本文深入解析高通Chromatix AEC模块中的曝光表配置与传感器参数计算,详细介绍了自动曝光控制(AEC)的核心概念、首行曝光时间计算、行时间与曝光模式对比、帧率计算逻辑以及曝光表高级配置技巧。通过实战案例展示如何优化传感器参数联调,帮助开发者掌握Chromatix工具在摄像头系统中的关键应用。

266

实战项目ssm权限系统1-springsecurity+redis+Aop&菜单按钮级别

常见1:1和1:n和n:n。

健康平安的活着的专栏 1996

【学习笔记】无人机(UAV)在3GPP系统中的增强支持(四)-无人机系统(UAS)命令与控制(C2)通信用例

UTM向5G网络提供无人机系统C2通信所需的信息,例如服务类别、无人机系统服务的流量类型、授权的无人机系统服务所需的QoS以及无人机系统服务的订阅。遵循模型B的网络辅助C2模型,为了确保UAS操作的C2通信的服务可用性和可靠性,特别是当无人机在操作员的视线之外(BLOS)飞行时,为无人机提供支持冗余的C2通信链路。如果需要创建额外的C2通信连接或更改现有数据连接的配置以进行C2通信,则5G网络会根据无人机系统的授权服务信息和C2通信中所需的QoS和优先级,修改或分配一个或多个C2通信流量的QoS流。

u011376987的博客 2051

Spring Security 基本介绍及基础项目搭建

Spring 是非常流行和成功的 Java 应用开发框架,Spring Security 正是 Spring 家族中的 成员。Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性的完整解决方 案。正如你可能知道的关于安全方面的两个主要区域是“认证”和“授权”(或者访问控 制),一般来说,Web 应用的安全性包括用户认证(Authentication)和用户授权 (Authorization)两个部分,这两点也是 Spring Security 重要核心功能。

一个菜鸡的博客 2万+

海康威视Web3.0插件实战:快速部署摄像头实时预览方案

本文详细介绍了海康威视Web3.0插件的实战应用,包括快速部署摄像头实时预览方案的完整流程。从插件下载安装到摄像头连接配置,再到浏览器兼容性解决方案,帮助开发者和IT人员高效实现网页端监控功能。特别针对预览功能调优和多摄像头管理等高级应用提供了实用技巧。

weixin_29266679的博客 346

AI初识—LLM、Ollama、Llama都是些个啥?

LLM指的是大语言模型(Large Language Model),是一种基于深度学习的模型,能够理解和生成自然语言。它通过大量文本数据进行训练,具备了理解上下文、生成连贯文本和回答问题的能力。著名的LLM包括OpenAI的GPT系列和Google的BERT。在AI技术快速发展的背景下,LLM、Ollama和Llama代表了现代自然语言处理的不同方面。LLM为我们提供了强大的语言理解能力,Ollama为模型的部署和管理提供了便利,而Llama则在效率和多样性上不断推进。

小蜗牛的珍贵百宝箱 4628

SpringSecurity 实战项目(一)

文章目录SpringSecurity 验证帐号密码security认证过程:[《Spring Security认证过程》](https://blog.youkuaiyun.com/weixin_38927257/article/details/102960752) 本文使用springboot+mybatis+SpringSecurity 实现用户权限数据库管理 实现用户和角色用数据库存储,而资源(url)和...

weixin_38927257的博客 5769

【即插即用模块】卷积篇 | TCSVT 2025 | MFACB:多尺度膨胀融合,快速扩大感受野,多尺度特征精准捕捉!

本文提出了一种新型多尺度融合膨胀卷积模块MFACB,用于增强语义分割任务中的特征表达能力。该模块通过三分支串联膨胀卷积结构快速扩大感受野,采用双路径融合机制(基础信息路径+多尺度信息路径)实现高效上下文聚合。相比传统卷积块,MFACB在保持轻量化的同时显著提升了多尺度特征捕捉能力,实验表明其性能优于基础残差块。该模块支持自定义膨胀率和步长调整,可灵活嵌入不同网络阶段,适用于需要特征增强的视觉任务。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 310

一篇搞懂springsecurity项目实战(纯干货)

目前来看比较合适的开源项目就是若依,有时间可以拉下来源码看下,另外说句题外话推荐下我自己的AI平台,国内稳定使用gpt3.5等AI模型:BoomAI一般的认证授权的表设计是基于RBAC权限模型设计的,若依的权限设计一共5个表用户实体表,代码如下: java复制代码对于的表sql如下: sql复制代码角色实体表,代码如下: java复制代码对应表的创建 SQL 如下: sql复制代码字段都写上注释,不多解释 roleKey 属性,对应的角色标识字符串,可以对应多个角色标识,使用逗号分隔

BASK2311的博客 1352

【ATC/DTC方法第一期】经典平均/昼夜温度周期ATC/DTC方法介绍(含Python代码实现)

【ATC/DTC方法第一期】经典平均/昼夜温度周期ATC/DTC方法介绍(含Python代码实现)

WW、forever的博客 484

ONNX Runtime C# YOLO全链路压测:从300ms到22ms的15个底层优化技巧

摘要:本文分享了工业质检场景下C#调用YOLOv8s ONNX模型的性能优化实战经验。原始单帧推理耗时300ms无法满足产线需求,通过全链路分析定位瓶颈(预处理85ms、推理180ms、后处理30ms)。重点优化措施包括:使用OpenCVSharp CUDA加速预处理(85ms→12ms),开启ONNX Runtime ALL级别图优化,选用TensorRT执行提供程序(180ms→22ms),以及优化内存管理和线程调度。最终实现单帧总耗时22ms±2ms,GPU利用率提升至85%,完整满足产线120块板/

2601_94871597的博客 402

Spring Security(三)--首个Spring Security项目

我们本次demo均是在Spring boot环境下搭建Spring Security的项目,因为Spring boot让我们不需要编写所有的配置,它自己提供了一些预配置项,因此我们可以只重写与实现不匹配的配置。我们也称这种方法为约定大于配置原则!那么本节我们需要了解的有如下内容:(1)创建一个仅具有Spring Security和Web依赖项的项目,看看如果不添加任何配置的话,该项目会如何运行。通过这种方式,我们将了解从默认的身份验证和授权配置中可以预期得到什么。

学习不止境的博客 1388

C#跨平台制图新纪元:Mapsui,一库在手,地图我有

深入学习Mapsui的渲染机制,定制属于你的地图样式,无论是颜色、图标还是文字,都可以随心所欲。

java专栏 1455

基于springboot个人健康档案管理系统

本文介绍了一个基于Spring Boot的个人健康档案管理系统。该系统采用Java语言开发,使用Spring Boot框架,数据库为MySQL,旨在解决传统纸质健康档案管理不便的问题。核心功能包括用户管理、健康档案管理(体检报告、病历、用药记录等)、数据可视化、健康提醒预警、数据共享与导出、医生协作等。系统具有安全性高、易用性强、可扩展性好等特点,适用于个人、家庭及医疗机构使用。文章还展示了部分核心代码,包括配置管理相关的控制器类。该项目为健康管理提供了数字化解决方案,支持用户随时查看和管理健康数据,促进医

qq_1406299528的博客 1044

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

基于java+springboot的个人健康档案管理系统(源码+文档+部署讲解等)

本课题基于 Java 语言与 SpringBoot 框架,开发一套集健康数据采集、分析、预警于一体的个人健康档案管理系统。系统采用微服务架构,核心模块包括:基础健康信息管理(身高、体重、过敏史)、医疗记录管理(就诊、检验检查、用药)、健康监测(可穿戴设备数据接入)、健康评估(风险预测模型)、医患互动(在线问诊、预约)。技术层面,集成 Spring Security 实现数据加密与权限控制,采用 Redis 缓存高频访问数据,结合 Elasticsearch 构建健康知识库,利用 WebSocket 实现实时

博主自己就是程序员、避免中介对接,从事软件开发多年,累计开发或辅导多名同学, 有丰富的项目开发和文档编写经验、同学们有任何项目问题都可以联系我~ 688

OV9734 DATASHEET,完整规格书

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

基于java+springboot的个人健康档案管理系统

【代码】基于java+springboot的个人健康档案管理系统。

java python定制开发 481

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

springboot个人健康档案管理系统

注意:实际开发时需要补充数据库配置、异常处理、日志记录等完整功能。建议使用SpringBoot Actuator进行系统监控,Lombok简化代码编写。

388

Spring Boot 3 + Vue 3 健康档案管理系统源码 前后端分离 实战项目

本文介绍一套基于Spring Boot 3.x和Vue 3.x的健康档案管理系统源码,涵盖居民用户、医护人员、系统管理员三个角色,实现健康档案录入、日常指标监测、AI风险评估与趋势预测、在线咨询、诊疗建议发布、数据统计与导出等功能。采用前后端分离架构,集成Spring Security权限控制、MyBatis-Plus ORM、Pinia状态管理、EasyExcel导出及Swagger接口文档,适合课程设计、毕业设计或二次开发学习。

kangxihuang的博客 81

基于Java springboot社区智慧养老系统健康档案数据(源码+文档+运行视频+讲解视频)

摘要:本文介绍了一个基于SpringBoot+Vue的智慧养老健康档案管理系统,采用MyBatis-Plus和MySQL+Redis技术栈,实现了老人健康数据的集中管理、实时更新和多角色协同功能。系统包含档案管理、数据预警、健康分析等核心功能,通过SpringSecurity进行权限控制。文章详细展示了技术架构、功能截图、测试用例及部分核心代码,特别说明了登录认证和权限校验的实现逻辑。测试结果表明系统运行稳定可靠,能够有效提升社区养老服务效率。文末提供了源码获取方式。

weixin_mrw479640的博客 967

springboot个人健康管理系统

本文介绍了一个基于Spring Boot框架开发的个人健康管理系统。该系统利用现代信息技术整合健康数据,提供智能分析和个性化建议,帮助用户高效管理健康状况。系统采用Spring Boot框架实现快速开发和简化配置,结合MySQL数据库存储数据,并集成多种健康监测设备数据。系统具备数据可视化、智能提醒、安全认证等功能,支持用户健康数据的长期跟踪和分析。开发环境包括Java 1.8、Tomcat 7、MySQL 5.7等技术栈,采用前后端分离架构,管理员可通过指定路径访问后台管理界面。系统具有用户友好界面和稳定

JAVA编码选手的博客 859

基于Java springboot社区养老服务平台系统健康档案数据(源码+文档+运行视频+讲解视频)

本文介绍了一个基于JavaSpringBoot框架的社区养老服务平台健康档案数据管理系统。系统针对老人健康档案分散、更新滞后等问题,采用SpringBoot+MyBatisPlus+Vue技术栈,实现档案管理、数据同步、预警等功能。文章详细展示了系统架构、技术实现(包括权限控制、数据库设计等)、测试用例及结果,证实系统能有效提升医护人员工作效率。最后提供了源码获取方式,为相关领域开发者提供参考。系统具有实用价值,能改善社区养老服务质量和效率。

weixin_mrw479640的博客 1143

基于SpringBoot+Vue的个人健康管理小程序的设计与实现(源码+文档+部署讲解等)

基于 SpringBoot+Vue 的个人健康管理小程序课题介绍:针对传统健康管理方式效率低、数据分散等问题,本课题开发基于 SpringBoot+Vue 的个人健康管理小程序。系统采用前后端分离架构,后端整合 Spring Security 实现权限控制,运用 MyBatis 实现数据持久化,采用 Redis 缓存高频数据;前端基于 Vue.js 开发响应式界面适配小程序端。系统包含健康档案管理、健康监测、运动计划、饮食记录、用药提醒、体检报告分析、就医服务等核心模块,支持多维度健康数据采集、异常预警、健

博主自己就是程序员、避免中介对接,从事软件开发多年,累计开发或辅导多名同学, 有丰富的项目开发和文档编写经验、同学们有任何项目问题都可以联系我,Java领域优质创作者、专注于Java技术领域和学生毕业项目实战 624

SSM+Vue构建个人健康信息管理系统实战

企业级应用开发中,前后端分离架构已成为主流技术方案。通过Spring框架实现依赖注入和AOP编程,结合MyBatis的SQL映射能力,可以构建高性能的Java后端服务。Vue.js作为渐进式前端框架,其响应式数据绑定和组件化开发模式能显著提升用户体验。这种技术组合特别适合开发数据敏感的医疗健康系统,如个人健康信息管理系统。系统实现涉及RESTful API设计、数据可视化展示以及WebSocket实时通信等关键技术,同时需要重点考虑健康数据加密存储和细粒度权限控制等安全方案。项目采用SSM+Vue技术栈,既

weixin_33507732的博客 215

基于SpringBoot+Vue的社区居民健康档案信息管理系统设计与实现

本文开发了一款基于SpringBoot+Vue的社区居民健康档案信息管理系统,旨在解决传统健康档案管理中存在的数据孤岛、更新滞后等问题。系统采用前后端分离架构,集成智能预警、健康风险评估等功能,支持多角色多终端访问。技术层面运用了Spring Security保障数据安全、Elasticsearch实现快速检索,并遵循国家电子健康档案标准。实际应用显示,系统可显著提升社区健康管理效率,如高血压规范管理率提高21%。未来可扩展对接智能穿戴设备,为构建"预防-治疗-康复"一体化服务体系提供技术支持,助力"健康中

G3259093417的博客 7

基于Spring Boot的社区健康体检信息系统

Entity@Data@Id@OneToOne@Column@Lob@Lob@Lob@PreUpdate本文详细介绍了基于Spring Boot的社区健康体检信息系统的技术栈选型、架构设计、核心功能与代码实现。该系统利用Spring Boot生态的高效与便捷,快速构建了稳定可靠的后端服务。通过清晰的层次划分与模块化设计,保证了代码的可维护性与可扩展性。未来可扩展方向数据智能化: 集成机器学习模型,对历史体检数据进行趋势预测与疾病风险预警。

2501_93250029的博客 84
上一篇: 并发情况下数据校验-基于数据库实现
下一篇: window python开发环境搭建- Anaconda
Chengdu.S
博客等级 码龄9年 282粉丝 86原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

Chengdu.S

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

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

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

打赏作者

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

抵扣说明:

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

余额充值