- 博客(162)
- 收藏
- 关注
原创 java之file和IO流
1. createNewFile 创建一个新的空的文件夹如果当前路径表示的文件是不存在的,则创建成功,方法返回true,如果当前路径表示的文件是存在的,则创建失败,方法返回false。如果父级路径是不存在的,那么方法会有异常IOExceptioncreateNewFile 方法创建的一定是文件,如果路径中不包含后缀名,则创建一个没有后缀的文件2. mkdir 创建一个单级文件夹windows当中路径是唯一的,如果当前路径已经存在,则创建失败,返回false。
2025-04-12 18:09:16
999
1
原创 java之多线程
注意:同步方法锁的对象是不可以指定的。在java中,非静态的锁对象是this。这样线程可以知道锁住和这个锁对象关联起来的线程,也可以唤醒与这个锁对象关联起来的线程。注意在synchronized小括号里面的一般会是该类的字节码文件(类.class)必须保证其唯一性。守护线程在后台运行,用于服务用户线程(非守护线程)。方法必须在同步代码块或同步方法中调用,而这些同步需要一个明确的锁对象来协调线程间的通信。同步方法是锁住方法里面所有的代码,其实就是把同步代码块里面的代码提取成同步方法。将线程设置为守护线程。
2025-04-12 18:08:15
288
原创 后端开发中的文件上传的实现
注册为 Bean,其他任何需要用到文件上传的地方都可以通过自动注入(在后端创建一个配置类用于初始化阿里云 OSS 客户端实例。封装一个工具类来处理文件上传的核心逻辑。编写 Controller 层接口,供前端调用。会自动从 Spring 容器中注入,因为。工具类,并将配置文件中的属性通过。使用配置类方式来初始化。
2025-03-28 12:01:30
454
原创 学习中学习的小tips(主要是学习苍穹外卖的一些学习)
登录成功后,我们可以将生成的 JWT 令牌存储在另一个实体类中,并将其返回给前端。这样,在前端请求其他需要认证的接口时,可以通过在请求头中携带 JWT 令牌,拦截器就能够通过。PasswordConstant.DEFAULT_PASSWORD.是默认密码123456。首先从前单一的pojo类细分成了pojo,dto和vo,登录成功后,可以使用jwtutil生成jwt令牌。方法来对该令牌进行校验。3. 注册的时候,需要对密码进行加密。
2025-03-28 11:59:48
824
原创 使用 Spring Security的一些常用功能
Spring Security 中常用的一些功能和策略,具体使用哪些功能取决于应用的需求。例如,基本的身份认证、权限控制、会话管理、跨域控制等是大多数 Web 应用中常见的配置。对于需要更高级安全控制的应用(如微服务架构中的 OAuth2、JWT 等),也可以进行相应的配置。
2025-03-22 13:31:26
535
原创 使用若依AI生成springBoot的前后端分离版本
点击生成按钮,若依AI将为你自动生成Controller、Service、Mapper等后端代码,并为你生成对应的Vue页面和接口。登录到若依管理后台后,进入系统管理模块,创建菜单目录。你可以为每个模块和子模块配置菜单,并为每个菜单设置访问权限。在后台管理系统中,进入“代码生成”模块,导入你数据库中的表。在数据库中执行若依提供的SQL脚本来创建所需的表结构。8. 将生成的代码放在新建的子模块当中,前后端分离,根据需求更改前端代码即可。默认是从官网上面下载,下载的非常非常慢,可以使用以下命令来使用镜像下载。
2025-03-22 13:02:02
954
原创 SpringSecurity——前后端分离登录认证
在 Spring Security 中,退出操作(logout)的设计逻辑与登录有所不同。登录过程涉及用户凭证验证、状态检查和密码匹配等环节,这些都有可能失败,所以需要提供失败处理器(如登录失败处理器)。前后端分离:Nginx 【Vue】 <----jwt----> Tomcat 【 (controller、sucurity) 】三个里面有任何一个不同,都是跨域,跨域是浏览器不允许的,浏览器是为了安全,不允许你跨域访问。从数据库中加载用户信息,返回一个包含用户状态和权限信息的。service实现类。
2025-03-21 19:48:13
968
1
原创 SpringSecurity——前后端分离登录状态如何保持
JWT 校验是在 Spring Security 的过滤器链中进行的。我们实现一个继承的类后端接口接收到前端的请求时,首先都会被jwt的验证过滤器拦截,拦截里面会验证jwt是否合法(是否是空、有没有篡改,和redis是否相等),验证未通过就直接给前端返回一个R对象的json,验证通过了,把spring security上下文中设置用户认证信息。
2025-03-21 19:20:01
804
原创 SpringSecurity——基于角色权限控制和资源权限控制
直接在resources/static/error下面配置页面即可Spring Boot 内置了一个默认的错误处理机制。当应用返回错误状态码(例如 403)时,Spring Boot 会自动查找与该状态码匹配的错误页面。如果在下存在对应名称(如403.html)的页面,系统就会直接返回该静态页面,而无需额外配置或编写代码。这种设计符合 Spring Boot “约定优于配置” 的理念,简化了错误处理的配置过程。
2025-03-19 21:49:03
1125
1
原创 SpringSecurity——如何获取当前登录用户的信息
Spring Security 将当前认证信息统一保存在中,通过实现线程级别的绑定。你可以直接通过方法参数(如Principal或更具体的认证类)来获取,也可以在任意位置通过获取。这些方式本质上都是获取同一个对象,只是使用方式不同。如果在项目中经常需要获取当前用户信息,可以封装一个工具类,方便调用和后续扩展。在你的用户实体类中,可以添加额外的属性,例如真实姓名、邮箱、电话等等。
2025-03-19 21:27:53
1665
原创 SpringSecurity——如何使用自定义的登录页面
这是Spring Security配置中的一部分,用来指定Spring Security应该拦截和处理哪个URL的登录请求。如果你启用了Spring Security的CSRF保护,并且没有在表单中包含这个令牌,Spring Security会拒绝该请求并抛出异常。1. 在Spring Security启用CSRF保护时,表单中需要添加一个隐藏的输入字段,用于传递CSRF令牌。用于指定自定义的登录页面的路径。,这个页面将包含一个表单用于输入用户名和密码,并提交到Spring Security的认证端点。
2025-03-18 15:07:39
715
原创 SpringSecurity——如何使用数据库进行登录操作流程
项目中一旦添加了spring security的jar包依赖,那么所有的controller接口路径访问时都会被spring security拦截,它会检查你是否登录,如果未登录,就会跳转到它的一个默认登录页,如果登录了,那么可以直接访问controller的路径。1. 选择基础依赖(最基础需要包括 springWeb,springSecurity,MysqlDriver,Mybatis Framework,LomBok)Spring Security 使用数据库进行登录操作流程。
2025-03-18 14:45:42
294
原创 SpringSecurity——如何实现验证码登录页面
验证码生成与前端显示前端页面通过请求验证码图片。生成验证码(这里使用带扭曲干扰的验证码),并将验证码字符串存入 Session,再将验证码图片通过 IO 流输出给前端。请求访问控制Spring Security 配置中允许/toLogin(登录页面)和(验证码图片接口)未登录访问。其他请求都需要经过认证后才能访问。登录请求及验证码校验当用户提交登录表单(提交至/login)时,自定义的会首先介入:从请求中获取用户输入的验证码,并从 Session 中获取正确验证码。
2025-03-17 20:45:38
1704
原创 Hutool工具包生成验证码的接口
快捷创建:通过快速生成多种样式的验证码。核心接口:所有验证码实现类都遵循ICaptcha接口,统一了方法,如getCode()getImage()和write()。灵活配置:支持传入自定义验证码生成器以及设置多种干扰效果(如圆圈、线条、扭曲),方便开发者根据业务需求灵活配置验证码内容和样式。
2025-03-17 20:36:24
727
原创 ElasticSearch第二弹——DSL查询7
Test// 准备Request// 准备请求参数// 发送请求// 解析结果// 获取搜索结果的所有匹配条目// 获取总的匹配条数// 获取每一条搜索结果// 获取当前搜索结果的 JSON 字符串// 将 JSON 字符串转化为 Java Bean(假设 ItemDoc 是你的文档类)// 打印出文档信息(包含高亮的名称)
2025-02-27 16:56:35
827
原创 Redis——用户签到BitMap,UV统计
如果是使用表来储存,需要耗费大量的内存,数据库压力山大因此我们换一种方式来存储,一个月最多有31天,因此,如果某一天签到了,那么对应的位为1,没有则为0。这种方式只需要31bit,也就是8字节,大大节省了空间。
2025-02-24 17:34:52
633
1
原创 GEO数据结构
是一种将经纬度编码为字符串的算法,用于地理位置的高效存储和查询。是一种将经纬度编码为字符串的算法,用于地理位置的高效存储和查询。:返回一个字符串表示的 GeoHash 值。:向指定的 key 中添加地理空间信息。:返回两点之间的距离,单位为指定的单位。:返回指定成员的 GeoHash 值。:返回指定成员的 GeoHash 值。根据当前页计算数据截取的起始位置(的结果存储到新的 key 中。:返回对应的经纬度数组,例如。:计算两个位置之间的距离。:在指定的范围内搜索成员。:返回指定成员的经纬度。
2025-02-24 15:42:08
434
原创 springmvc三个域对象
Request作用域:适用于单次请求中的数据传递,生命周期随请求的结束而结束。Session作用域:适用于一个用户会话期间需要保存的数据,例如用户状态,生命周期随会话结束而结束。Application作用域:适用于整个应用程序范围内共享的数据,例如配置信息,生命周期随服务器关闭而结束。请求域:当你点击“搜索”按钮后,搜索结果页面展示给你,这些数据只在这次请求中有效。会话域:当你登录后,或者在不同页面中来回切换时,购物车中的商品信息保持不变,直到你退出登录或者会话超时。
2025-01-14 09:34:04
1015
原创 Feed流(基于黑马程序员关注和推送模块)
在 Redis 的 Sorted Set 中存储 Feed 流数据时,为了解决时间戳重复导致的分页重复读取问题,可以通过动态调整分页参数 offset 的方式,确保正确跳过重复数据。具体做法是记录上一页的最小时间戳(lastMinTime)和重复数量(offset),在下一页查询时判断当前页的最小时间戳是否等于上一页的最小时间戳。如果相等,则累加 offset 跳过重复数据;如果不相等,则重置 offset 为当前页的最小时间戳的重复数量。这种方式可以高效实现滚动分页,保证数据查询的完整性和准确性。
2025-01-14 09:32:05
1090
原创 Redis实战——实现一人一赞排行榜,关注和共同关注的功能
在黑马点评项目中,我们需要实现点赞功能。这项功能既涉及记录用户点赞行为,又需要支持点赞数据的统计与展示。为了实现这一功能,我们选择了高效的缓存数据库——Redis。在实现点赞功能时,我们需要频繁查询某个用户是否已经点赞。若直接使用关系型数据库(如 MySQL),将对数据库造成巨大的压力,尤其是在高并发场景下。为了解决这一问题,我们选择了 Redis。它具有以下优势:在点赞业务中,我们需要同时记录:基于这一需求,使用 Redis 的集合(Set) 数据结构是最佳选择。Set 的特点如下:点赞排行榜的实现
2025-01-13 18:41:37
571
原创 MQ+Redis 实现异步秒杀 (黑马点评项目为例)
监听队列中的订单消息,并执行具体的订单创建逻辑。,实现消息的 JSON 序列化和反序列化。依赖实现 RabbitMQ 的集成。
2025-01-13 12:55:19
552
原创 springmvc的获取请求数据
在使用 SpringMVC 开发 web 应用时,我们经常需要从用户的请求中获取数据。不管是表单提交、查询参数,还是路径上的数据,SpringMVC 都为我们提供了简单而强大的方式来获取这些数据。
2025-01-12 10:11:32
1198
1
原创 springCloud特色知识记录(基于黑马教程2024年)
是 Spring Cloud Gateway 中的一个核心过滤器,它负责将请求真正路由到目标服务,并处理响应的回传。简单来说,这是网关在处理请求时,实际完成路由和转发的核心组件。
2025-01-12 10:06:50
866
原创 RequestMapping详细总结
RequestMapping是Spring MVC中一个非常强大且灵活的注解,通过它我们可以轻松地将HTTP请求映射到相应的处理方法上。它支持多种方式的URL匹配、请求方式过滤、请求参数过滤以及请求头的控制,从而让我们的控制器代码更加简洁、规范。如果能灵活掌握@RequestMapping的各种属性,Spring MVC开发将变得更加轻松和高效。希望这篇文章能够帮助你更好地理解和使用@RequestMapping。如果你有任何疑问或想要了解更多细节,欢迎在评论区留言!
2025-01-11 18:16:14
1234
原创 RabbitMQ高级篇
是指在分布式系统中,某一操作无论被执行一次还是多次,其产生的效果是相同的。在使用 RabbitMQ 或其他消息队列时,消费者可能会因重试、重复投递等原因处理相同的消息多次。的缺点和高消息积压场景下的性能问题。它将消息尽可能存储在磁盘上,而不是内存中,从而减少内存占用和避免内存不足导致的队列阻塞。在 RabbitMQ 的消费者确认机制中,消费者需要通知 RabbitMQ 消息是否被成功处理。是为了解决上述问题的一种优化方案,其目标是最大限度地减少内存占用,优先使用磁盘存储消息,从而解决持久化策略的缺点。
2025-01-11 09:17:44
912
原创 苍穹外卖的微信支付和接单和催单提醒
其实就是生成空的JsonObject,不然按照老师来的话,会报错,空指针错误。在这里直接使用WebSocketServer此昂客户端(商家)传递接单消息。
2025-01-10 22:07:51
214
原创 RabbitMQ基础(简单易懂)
它基于AMQP协议(Advanced Message Queuing Protocol),一种为应用构建消息队列的标准协议。过程中,它提供了一些重要模块:为消息发送的Producer(生产者),分发消息的Exchange(交换器),写入消息的Queue(队列),和读取消息的Consumer(消费者)。MQ 的核心概念1. 异步处理问题:系统需要执行一些耗时操作(如发送邮件、生成报告),如果这些操作在主线程执行,会影响用户体验或导致系统响应变慢。MQ 的解决方式。
2025-01-10 17:04:33
1938
原创 Redis之秒杀活动
分布式锁:满足分布式系统或集群模式下多进程可见并且互斥的锁。分布式锁是一种跨多个进程或服务器实例的机制,用于在分布式系统中对共享资源实现同步控制。它是为了解决多个进程或服务访问同一资源时的并发问题而设计的,确保在同一时间只有一个进程能够访问某个共享资源。在单机环境中,和等 JVM 内部的锁机制可以很好地解决并发问题,但在分布式系统中,多个实例运行在不同的 JVM 上,内存不共享,传统的锁机制就无法满足需求。这时,就需要分布式锁分布式锁的关键特性互斥性。
2025-01-09 16:35:19
1170
原创 Redis 优化秒杀(异步秒杀)
秒杀系统的异步处理与事务保障:在高并发秒杀场景中,通过 Redis 和 Lua 脚本实现库存校验和原子操作,结合阻塞队列削峰填谷,保证系统性能与稳定性。消费者线程通过单线程线程池按顺序处理订单,避免并发冲突。为确保事务生效,使用代理对象调用核心业务方法,避免直接调用导致事务失效的风险。这种设计不仅优化了系统性能,还有效防止了超卖和重复下单,为高并发业务场景提供了稳健的解决方案。
2025-01-09 16:33:40
1686
原创 java之Collection
代码int age;@Override// 按名字字母顺序排序// 按年龄降序排序运行结果注意!!Comparator是用于定义外部比较器的,它不应该直接由实体类实现,通常是创建一个单独的类或匿名类来定义比较规则。如果让实体类实现了Comparator,就会破坏逻辑结构,因为实体类变成了一个比较器,且多了与自身逻辑无关的职责。所以注意实体类实现了Comparable接口5. 小结简单排序或List.sort是最常用的方法,适用于基本类型和String。
2025-01-08 20:15:27
956
原创 分布式锁Redisson详解,Redisson如何解决不可重入,不可重试,超时释放,主从一致问题的分析解决(包括源码简单分析)
分布式锁Redisson详解,Redisson如何解决不可重入,不可重试,超时释放,主从一致问题的分析解决(包括源码简单分析)
2025-01-08 15:53:06
1439
原创 Map集合
其实就是使用自定义对象的有参构造方法来构造出一个自定义对象,储存数据Collections.addAll(manAct, "张三大,18", "王五,25", "赵六,21", "孙七,22", "李华,22", "小李子,23");Collections.addAll(femaleAct, "李四,19", "格格,21", "杨天安,22", "玉玉,23", "杨宝贝,26", "赵八,19");// 男演员:名字为3个字的前两个人.limit(2)
2025-01-06 22:05:20
795
原创 Redis查询缓存
什么是缓存?缓存是一种提高数据访问效率的技术,通过在内存中存储数据的副本来减少对数据库或其他慢速存储设备的频繁访问。缓存通常用于存储热点数据或计算代价高的结果,以加快响应速度。添加Redis缓存有什么好处?Redis 基于内存存储,读写速度极快,相比于传统的磁盘存储方式,能够显著提高系统的响应速度。缓存了高频访问的数据后,可以减少对数据库的访问次数,从而减轻数据库的负载。简单的将数据存入Redis之后存在什么问题?当数据库中的数据发生变化时,缓存中的数据可能没有及时更新,导致数据不一致。
2025-01-05 20:43:24
1001
原创 Redis的数据结构(基本)
我们可以进入redis命令行窗口Redis安装完成后就自带了命令行客户端:redis-cli,使用方式如下::指定要连接的redis节点的IP地址,默认是127.0.0.1-p 6379:指定要连接的redis节点的端口,默认是6379-a 123321:指定redis的访问密码ping:与redis服务端做心跳测试,服务端正常会返回pong不指定commond时,会进入redis-cli的交互控制台:在 Redis 中,无论是字符串、整数还是浮点数,它们都被归为字符串类型存储和管理。
2025-01-05 15:06:19
1146
原创 Docker
自定义镜像是基于已有的基础镜像,通过添加自己的应用、依赖、配置文件等,制作出符合自己需求的镜像。例如,在官方的 Nginx 镜像基础上,添加自己的网页资源,变成一个自定义的静态网站镜像。# 使用官方的 Nginx 基础镜像# 复制本地的静态文件到 Nginx 默认的网页目录# 暴露容器内的 80 端口EXPOSE 80# 启动 Nginx 服务"]为什么需要自定义镜像?环境一致性:将应用程序及其所有依赖都封装在镜像中,避免环境差异引起的问题。便于部署。
2025-01-04 20:11:59
1250
3
原创 登录的几种方式
在服务器端有默认的时长(过期时间),这是由服务器配置决定的。默认情况下,Session 的有效期会受到服务器设置的影响,而无需手动设置时长。但是如果我们还是只在登录的拦截器当中刷新token的有效值,那么就只会在局部范围内保证token有效。使用方便,但在分布式、高并发、跨平台场景下,其缺点可能带来较大的限制。这个时间表示,如果用户在 30 分钟内没有访问服务器,Session 会被销毁。用户访问任何页面都应该被视为活跃状态,无论页面是否需要登录,都需要刷新。只能保证在局部范围(需要登录的接口)内刷新。
2025-01-04 20:08:29
1036
原创 本地计算机上的MySQL服务启动后停止(connection refused: connect)解决一系列数据库连接不上的问题
推荐其他可能可以解决的博客: 【完美解决】mysql启动不了:本地计算机上的MySQL服务启动后停止-CSDN博客如果服务依然启动失败,可能需要重新注册 MySQL 服务:注意这里需要查看my.ini的文件是否存在(目录一定要对哦),可以自己创建 启动服务: 但是需要注意的是 ,重新安装过后会生成一个密码,我们需要找到他才能登录到Mysql中然后修改为自己的密码:通常在以下目录:C:\Program Files\MySQL\MySQL Server 8.0\data使用以下命令改变密码即可A
2024-12-21 18:10:04
1207
2
原创 springmvc的简介
SpringMVC是一个实现了MVC架构模式的Web框架,底层基于Servlet实现。SpringMVC已经将MVC架构模式实现了,因此只要我们是基于SpringMVC框架写代码,编写的程序就是符合MVC架构模式的。MVC的架子搭好了,我们只需要添添补补。
2024-12-05 13:24:17
1030
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人