分布式微服务系统架构第142集:全栈构建

news/2025/10/5 14:53:58/文章来源:https://www.cnblogs.com/lxjshuju/p/19126589

加群联系作者vx:xiaoda0423

仓库地址:https://webvueblog.github.io/JavaPlusDoc/

https://1024bat.cn/

https://github.com/webVueBlog/fastapi_plus

https://webvueblog.github.io/JavaPlusDoc/


/** * 本地启动解决跨域问题 *  打包发布请注释该类,可能会造成一定的影响,解决本地启动跨域问题 */
@Overridepublic  void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)        throws ServletException, IOException {    HttpServletResponse response = (HttpServletResponse) servletResponse;    HttpServletRequest request = (HttpServletRequest) servletRequest;    //设置响应内容类型    response.setContentType("application/json; charset=utf-8");    //设置响应字符编码    response.setCharacterEncoding("UTF-8");    //设置Access-Control-Max-Age,表示在3600秒内不需要再次发送预检请求    response.setHeader("Access-Control-Max-Age", "3600");    //设置允许的HTTP请求方法    response.setHeader("Access-Control-Allow-Methods", "POST, GET,PUT, OPTIONS, DELETE");    //设置允许的跨域请求来源    response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));    //设置是否允许发送Cookie    response.setHeader("Access-Control-Allow-Credentials", "true");    //设置允许的请求头    response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, token");    //继续执行过滤器链    filterChain.doFilter(request, response);}
用户提交表单会携带验证码相关参数,产品应用在相关接口处将该参数传给 集成jar包相关接口做二次校验,以确保该次验证是正确有效的。 引入相关组件,调用初始化函数,通过配置的一些参数信息。将行为验证码渲染出来。
    com.anji-plus    spring-boot-starter-captcha    1.3.0
缓存实现
public interface CaptchaCacheService {     void set(String key, String value, long expiresInSeconds);     boolean exists(String key);     void delete(String key);     String get(String key);     /**     * 缓存类型-local/redis/memcache/..     * 通过java SPI机制,接入方可自定义实现类     * @return     */    String type();}
二次校验接口
请求方式
请求参数
响应参数
异常代号
登录为例,用户在提交表单到产品应用后台,会携带一个验证码相关的参数。产品应用会在登录接口login中将该参数传给集成jar包中相关接口做二次校验。接口地址:https://****/captcha/verify
HTTP POST, 接口仅支持POST请求, 且仅接受 application/json 编码的参数

参数

类型

必填

备注

captchaVerification

String

Y

验证数据,aes加密,数据在前端success函数回调参数中获取

参数

类型

必填

备注

repCode

String

Y

异常代号

success

Boolean

Y

成功或者失败

error

Boolean

Y

接口报错

repMsg

String

Y

错误信息

error

说明

0000

无异常,代表成功

9999

服务器内部异常

0011

参数不能为空

6110

验证码已失效,请重新获取

6111

验证失败

6112

获取验证码失败,请联系管理员

引入前端vue组件, npm install axios    crypto-js   -S

CryptoJS是一个JavaScript的加解密的工具包

     //引入组件import Verify from "./../../components/verifition/Verify";export default {    name: 'app',    components: {       Verify    }    methods:{       success(params){       // params 返回的二次验证参数       }    }}

事件

参数

说明

success

验证码匹配成功后的回调函数

error

验证码匹配失败后的回调函数

ready

验证码初始化成功的回调函数

验证码参数

参数

说明

captchaType

1)滑动拼图 blockPuzzle  2)文字点选 clickWord

mode

验证码的显示方式,弹出式pop,固定fixed,默认是:mode : ‘pop’

vSpace

验证码图片和移动条容器的间隔,默认单位是px。如:间隔为5px,设置vSpace:5

explain

滑动条内的提示,不设置默认是:'向右滑动完成验证'

imgSize

其中包含了width、height两个参数,分别代表图片的宽度和高度,支持百分比方式设置 如:{width:'100%',height:'200px'}

blockSize

其中包含了width、height两个参数,分别代表拼图块的宽度和高度,如:{width:'40px',height:'40px'}

barSize

其中包含了width、height两个参数,分别代表滑动条的宽度和高度,支持百分比方式设置,如:{width:'100%',height:'40px'}

{    "captchaType": ""  //验证码类型}

在CentOS 4.x开始用 fontconfig 来安装字体库,所以输入以下命令即可:

sudo yum -y install fontconfig

这段代码是一个 Spring Bean 的定义,涉及到一个名为 AjCaptchaCacheService 的服务的初始化过程。具体是根据 AjCaptchaProperties 配置来创建一个 CaptchaCacheService 实例。这里面包含了对不同缓存类型的支持(比如 Redis 本地缓存等),并且在特定条件下做了额外的配置(例如设置 Redis 模板)。以下是对代码的逐行解析:

1. @Bean(name = "AjCaptchaCacheService")

  • 作用:这个注解表示该方法是一个 Spring Bean,AjCaptchaCacheService 是这个 Bean 的名字。Spring 会将这个方法的返回值注册为一个 Bean,并且在上下文中可以通过这个名字来获取该 Bean。

2. @Primary

3. public CaptchaCacheService captchaCacheService(AjCaptchaProperties config)

  • 方法签名:这个方法定义了一个名为 captchaCacheService 的 Bean,返回类型是 CaptchaCacheService,并且接收一个 AjCaptchaProperties 类型的参数 config,它是从 Spring 容器中注入的配置对象。AjCaptchaProperties 可能包含了与验证码相关的配置,比如缓存类型、过期时间等。

4. CaptchaCacheService ret = CaptchaServiceFactory.getCache(config.getCacheType().name());

5. if(ret instanceof CaptchaCacheServiceRedisImpl){

  • 功能:如果返回的 CaptchaCacheService 是 CaptchaCacheServiceRedisImpl 类型的实例(即是 Redis 缓存实现),则进入这个 if 分支进行进一步配置。

6. ((CaptchaCacheServiceRedisImpl) ret).setStringRedisTemplate(redisTemplate);

7. return ret;

  • 功能:返回创建好的 CaptchaCacheService 实例(ret)。这个实例会被 Spring 容器管理,并且可以在需要使用 CaptchaCacheService 的地方注入和使用。


代码总结

该方法根据 AjCaptchaProperties 配置动态选择一个缓存类型,并根据缓存类型初始化 CaptchaCacheService 实例。若缓存类型为 Redis,则进一步注入 StringRedisTemplate 以支持 Redis 操作。最终返回的 CaptchaCacheService 实例会作为 Bean 被 Spring 容器管理和注入使用。

适用场景

这种方式适用于需要根据配置来灵活选择缓存类型的场景。例如,当缓存方式可以在 Redis 和本地缓存之间切换时,采用这种方法可以避免在不同环境中修改大量的代码,便于配置化管理。

@Bean(name = "AjCaptchaCacheService") 是 Spring 中用来定义 Bean 的一种方式,name 属性的作用和为什么这么写可以从以下几个方面来理解:

1. name 属性的作用

在 Spring 中,@Bean 注解用来定义一个 Bean,name 属性则指定该 Bean 的名称。默认情况下,如果没有指定 name,Spring 会根据方法名(即 captchaCacheService)作为 Bean 的名称。

示例:

@Bean(name = "AjCaptchaCacheService")public CaptchaCacheService captchaCacheService(AjCaptchaProperties config) {    //...}

这里,@Bean(name = "AjCaptchaCacheService") 表示将该 Bean 注册到 Spring 容器时,使用 AjCaptchaCacheService 作为其名称。也就是说,在 Spring 容器中,这个 CaptchaCacheService 的实例将被引用为 AjCaptchaCacheService

默认名称与自定义名称的区别:
  • 如果没有指定 name,Spring 会将 Bean 的名称默认设置为方法名称(即 captchaCacheService)。

  • 如果指定了 name,则这个 Bean 会以指定的名称(即 AjCaptchaCacheService)注册到容器中。

2. 为什么这么写

在这个上下文中,给 Bean 指定一个明确的名称有几个目的:

  • 避免命名冲突:假设 Spring 容器中有多个 CaptchaCacheService 类型的 Bean,如果不指定名称,Spring 会使用方法名称(captchaCacheService)作为默认的名称。如果容器中已经存在一个名为 captchaCacheService 的 Bean,那么 Spring 就会发生冲突,导致注入失败。通过指定一个自定义名称(例如 AjCaptchaCacheService),可以确保唯一性。

  • 方便引用:指定名称后,可以在其他地方通过名称来引用该 Bean。例如,如果你需要通过 @Autowired 注入该 Bean,可以明确指定使用 AjCaptchaCacheService,避免因为默认名称造成的混淆。

  • 明确的命名意图AjCaptchaCacheService 作为 Bean 名称清楚表达了该 Bean 与 AjCaptchaProperties 和验证码相关,具备较好的可读性与语义性。

3. 相关注解和配置

@Primary 也在代码中出现,说明这个 Bean 是默认注入的优先选择。当有多个同类型的 Bean 时,Spring 会优先注入被标记为 @Primary 的 Bean。name 和 @Primary 结合使用,有助于明确在多个同类型 Bean 存在时,注入哪个 Bean。


总结

  • name 属性用来指定 Spring 容器中注册的 Bean 名称,避免命名冲突,增强可读性和可维护性。

  • 如果不指定,Spring 默认使用方法名作为 Bean 名称。

  • 在这个代码中,AjCaptchaCacheService 明确指定了该 Bean 的名称,避免了潜在的冲突,并且使代码的意图更加明确。

在 Java 项目中,META-INF 文件夹是一个非常特殊的目录,通常存在于项目的 resources 文件夹中,并且在项目打包成 .jar 或 .war 等格式时,会被保留在其中。META-INF 目录的主要作用是存放关于 JAR 文件或者类路径下的元数据信息。它的内容通常与 Java 类加载、服务发现、JAR 描述、加密算法等方面有关。

META-INF 目录的常见用途和内容

  1. META-INF/MANIFEST.MF

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/928371.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025 年电永磁吊具制造厂家 TOP 企业品牌推荐排行榜全新发布,含大型电永磁吊具,全覆盖,起重,小型,钢板,钢板电永磁吊具公司推荐!

当前工业生产中,电永磁吊具作为物料搬运的核心设备,其性能直接影响生产效率与作业安全。但市场现状却不容乐观,一方面,大量小型厂商缺乏核心技术,生产的吊具常出现吸力不足、能耗超标、故障频发等问题,不仅拖慢生…

实用指南:云原生时代 Kafka 深度实践:03进阶特性与最佳实践

实用指南:云原生时代 Kafka 深度实践:03进阶特性与最佳实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Cons…

MySQL——事务 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

设计师工作室网站网页设计实训报告2000字通用

在Web程序中,验证码是经常使用的技术之一。Web程序永远面临未知用户和未知程序的探测。为了防止恶意脚本的执行,验证码技术无疑是首选方案之一。本文将讨论如何在JSP和Servlet中使用验证码技术。 验证码的产生思路很简单,在Servlet中随机产生…

详细介绍:几何绘图与三角函数计算应用

详细介绍:几何绘图与三角函数计算应用pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mon…

详细介绍:Hive在实际应用中,如何选择合适的JOIN优化策略?

详细介绍:Hive在实际应用中,如何选择合适的JOIN优化策略?2025-10-05 14:43 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !importa…

【VM虚拟机】VM新版本,虚拟机中键盘输入延迟卡顿

关键设置: 虚拟机路径下.vmx文件中添加 keyboard.vusb.enable = "TRUE" 其他什么core-数量,3D加速都不好使

京东联盟 wordpress模板网站可以做优化

摘要:本篇博客深入介绍了如何借助深度学习技术开发癌症图像检测系统,以提高医疗诊断的精度和速度。系统基于先进的YOLOv8算法,并对比分析了YOLOv7、YOLOv6、YOLOv5的性能,如mAP和F1 Score。详细解释了YOLOv8的原理,并附…

2025石灰源头厂家最新推荐榜单:深度解析生石灰,熟石灰物流效率与综合实力

当前石灰行业需求持续攀升,但市场乱象凸显:部分企业产能波动大、交货周期长,劣质产品充斥市场,技术落后与环保不达标问题频发,严重困扰下游采购决策。尤其在高活性、专用化产品需求年增 18% 的背景下,企业亟需权…

AtCoder Beginner Contest 426 游记

$20min$ 拿下四题,自信跳过看起来复杂的 E 去做数据结构 F,结果迷失在调线段树未能通过。省流 \(20min\) 拿下四题,自信跳过看起来复杂的 E 去做数据结构 F,结果迷失在调线段树未能通过。10.4 内含剧透,请vp后再来…

广东手机网站制作价格进一步推进网站建设

文章目录------------------------------学习教程篇-------------------------------bilibili哔哩哔哩网易云课堂siki学院:泰课在线:可汗学院:线性代数的本质 - bilibili计算机科学速成课 - bilibiliLearnOpenGL:The Book of Shad…

淘宝客网站如何做推广方案wordpress接入微信支付

程序员在编程过程中,经常会在代码中使用到“where 11”,这是为什么呢?SQL注入初次看到这种写法的同学肯定很纳闷,加不加where 11,查询不都一样吗?例如:select * from customers; 与 select * fr…

如何把MCP服务集成到智能体?手把手教学(含视频教程)

导航前言 视频讲解 作品展示 工作流程展示 操作步骤一 新建mcpserver工作流 二 测试智能体 三 发布智能体结语 参考AI+ 的时代已经来临,不管你是否愿意,你都必须去接受它。前言 在前面的文章《10min搭建一个大模型智…

bootimg.exe检查验证备份导出的img镜像文件是否正常

前言全局说明经常刷手机的人,必要做的就是先备份,那备份出的文件,是否正常,就要用 bootimg.exe 来验证注意:刷机,会丢失用户:照片、聊天等信息资料。请备份基带等信息。请慎重刷机 !!! 注意:刷机,会丢失用户:…

华为云Flexus+DeepSeek征文|华为云Flexus服务器dify高效的平台通过自然语言转sql并执行搭建电商数据分析

华为云Flexus+DeepSeek征文|华为云Flexus服务器dify高效的平台通过自然语言转sql并执行搭建电商数据分析pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: …

《独立开发者精选工具》第 019 期

IndieTools 是一个专为独立开发者打造的精选工具和资源平台。通过直观的分类,轻松找到 Web 开发、设计、营销、SEO 等全流程实用工具。 独立开发者必备网站:https://www.indietools.work Github: https://github.com…

备案个人可以做视频网站郑州 网站建设 东区

抖音的转场动画—iOS https://www.jianshu.com/p/29b0165de712 抖音的上下滑实现—iOS https://www.jianshu.com/p/e8799510c7aa转载于:https://www.cnblogs.com/qingzZ/p/10281740.html

什么网站做简历最好嘉兴网站排名优化报价

总结: ●使用模板时必须确定出通用数据类型T,并且能够推争出一致的类型 #include<iostream> using namespace std; #include<string> #include<fstream>//函数模板注意事项 template<class T> //typename 可以替换成class void mySwap(T&a, T&am…