认证源码分析与自定义后端认证逻辑
本文深入分析Spring Security认证流程,从UsernamePasswordAuthenticationFilter到AuthenticationManager、ProviderManager,最终解析DaoAuthenticationProvider如何通过UserDetailsService实现自定义认证。重点揭示了自定义用户服务需实现loadUserByUsername并返回含权限的UserDetails对象,结合配置类注册服务,实现数据库认证。附完整代码仓库。
整合切面,参数拦截+过滤
该类基于Spring AOP实现请求参数的前置拦截与日志记录,自动捕获Controller层请求的URL、方式、参数及响应方法,并记录执行耗时,便于调试与监控,支持后续扩展如数据脱敏或存储。
整合Logback,滚动记录+多文件
本文档包含logback-spring.xml配置文件及使用示例,定义了多种日志记录器(如INFO、ERROR、SQL等),并演示如何在Java项目中通过LogProxy获取指定日志实例,实现分类日志输出与管理。
Mybatis映射关系(1-1 1-n n-n)
本文介绍MyBatis中四种关联映射:一对一(resultMap解决字段与属性映射)、一对多(使用`<collection>`映射集合)、多对一(使用`<association>`关联对象)及多对多(通过中间类结合`<collection>`实现)。适用于处理数据库表间复杂关系,提升数据封装灵活性。
2.过滤器链加载原理
通过分析DelegatingFilterProxy、FilterChainProxy与SecurityFilterChain,揭示了Spring Security中15个过滤器的加载机制。虽未显式配置,实则由框架自动组装。底层原理明晰后,方可更好自定义登录页面,实现认证功能。
认识SpringSecurity
Spring Security 是成熟的安全框架,提供认证、鉴权及防御网络攻击等核心功能。支持多种认证方式(如OAuth2、JWT)、基于URL和方法的权限控制,并通过过滤器链实现安全逻辑,保障应用安全。
@Inherited
@Inherited 是 Java 中的元注解,用于修饰其他注解,使其在类继承中可被子类继承。当某注解使用 @Inherited 时,若该注解应用于父类,其子类将自动继承该注解。但仅适用于类的继承,不适用于接口继承或类实现接口的场景。
1.RememberMe简介及用法
RememberMe功能实现用户关闭浏览器后仍保持登录状态,通过Cookie存储令牌而非明文密码。Spring Security中配置rememberMe()并设置key,登录时生成持久化令牌存于Cookie,后续请求自动携带验证身份。但需防范令牌泄露风险,可通过数据库持久化Token并增加二次校验提升安全性。
3.实现权限管理的技术
权限管理技术选型需综合考量。常见方案如Apache Shiro,轻量易用但安全维护弱;Spring Security功能强大,适合Spring生态但较重;自定义ACL贴近业务但通用性差。多数工具均为ACL或RBAC的封装,应根据项目需求权衡选择。
1.认识OAuth2.0
OAuth2.0是一种开放授权标准,允许第三方应用在用户授权下安全访问资源,无需获取用户账号密码。其核心为令牌机制,支持四种模式:授权码模式(最安全,常用于第三方登录)、简化模式(适用于无后端应用)、密码模式(需高度信任)和客户端模式(服务间调用)。广泛应用于API授权与单点登录场景。
2.OAuth2.0实战案例
本教程介绍OAuth2四大授权模式实现:创建父工程及资源、授权模块,配置启动类与处理器;通过授权码、简化、密码及客户端模式测试,完成登录认证、权限授予、令牌申请与资源访问全流程。
4-MongoDB索引知识
MongoDB索引通过B树结构提升查询效率,避免全表扫描。支持单字段、复合、地理空间、文本及哈希索引,适用于等值、范围、排序、全文检索等多种查询场景,显著提升大数据量下的查询性能。
1-MongoDB相关概念
MongoDB是一款高性能、无模式的文档型NoSQL数据库,适用于高并发、海量数据、高扩展性场景。它以BSON格式存储数据,灵活支持复杂数据结构,广泛应用于社交、游戏、物联网、物流和视频直播等领域。适合无需事务、需快速迭代、高读写负载及大规模地理查询的应用,相较MySQL可大幅降低开发运维成本。
MongoDB常用命令
本文介绍MongoDB数据库操作,包括创建与删除数据库、集合的显式与隐式创建、文档的增删改查及分页排序查询。以文章评论数据存储为例,演示了实际CRUD操作与注意事项。
MongoDB索引知识
MongoDB索引基于B树结构,提升查询效率,避免全集合扫描。支持单字段、复合、地理空间、文本及哈希索引,优化相等匹配、范围查询与排序操作,显著提升大数据量下的查询性能。
MyBatis常见配置
本文介绍 MyBatis 核心配置与多环境管理,涵盖属性加载优先级(方法参数 > resource/url > properties 元素)、关键配置项如缓存、延迟加载、执行器类型等,并详解 environments 环境配置及事务管理机制(JDBC 与 MANAGED),适用于多数据源场景。
3-MongoDB常用命令
本文介绍如何使用MongoDB存储文章评论数据,涵盖数据库与集合的创建、增删改查操作及分页排序查询。使用`use`创建数据库,通过`insert()`插入文档,`find()`查询数据并支持投影与条件筛选,`update()`结合`$set`实现局部更新,`remove()`删除文档,配合`limit()`、`skip()`和`sort()`实现分页排序功能。所有操作均基于BSON格式,适用于高效管理非结构化数据。
ArrayList扩容机制
ArrayList的add方法添加元素时,先调用ensureCapacityInternal()确保容量。首次添加时,最小容量设为10,触发扩容;后续添加若超出当前容量,则调用grow()将容量扩为原来的1.5倍。grow()通过位运算高效计算新容量,确保集合动态扩展性能。注意:length用于数组,length()用于字符串,size()用于集合。
2.映射关系(1-1 1-n n-n)
MyBatis中通过resultMap实现关联映射:一对一使用基本映射或resultMap解决字段不一致;一对多在“一”方配置`<collection>`,如用户关联多个角色;多对一通过`<association>`实现,如博客关联作者;多对多借助中间类,双方均用`<collection>`维护关系,如用户与部门的双向关联。
MongoDB实战演练
本文介绍某头条文章评论系统的设计与实现,基于MongoDB和SpringDataMongoDB构建微服务。内容涵盖需求分析、表结构设计、技术选型、实体类编写及增删改查功能开发,并实现按文章ID查询评论、分页查询子评论、评论点赞等功能,重点利用MongoTemplate提升点赞操作效率。
2-MongoDB单机部署
本文介绍MongoDB在Windows与Linux系统中的安装启动及连接方法。涵盖下载安装包、解压配置、命令行或配置文件启动服务,以及通过mongo shell和Compass图形化工具连接数据库。同时提供Linux环境下部署单机MongoDB的详细步骤,包括目录创建、配置文件编写、防火墙设置与服务启停操作,确保快速上手并稳定运行。
Thread.sleep(0) 到底有什么用(读完就懂)
Thread.Sleep(0)并非无用,它会触发操作系统立即重新进行CPU竞争,让其他线程获得执行机会,避免界面假死。而Sleep(1000)也不保证精确唤醒,因线程调度受优先级和系统负载影响。理解其原理有助于编写更高效的多线程程序。
Java泛型类型擦除以及类型擦除带来的问题
Java泛型在编译时会进行类型擦除,泛型信息被移除,仅保留原始类型(如Object或限定类型)。擦除后,List<String>和List<Integer>均变为List,导致getClass()相等;反射可绕过泛型限制,证明类型检查基于引用而非对象。静态成员不能使用类的泛型参数,因泛型实例化依赖对象创建,而静态上下文无此支持。
Eclipse运行SSM/SSH项目教程
本文介绍了Eclipse环境下项目运行的完整流程,包括JDK、Tomcat等基础软件的配置,项目导入步骤,以及Eclipse与Tomcat的绑定方法。通过图文指导,帮助开发者快速搭建Java Web开发环境并成功启动项目。
如何做好SQL质量监控
git-poison基于go-git实现分布式bug追溯,解决多分支开发中bug漏修、漏发问题。通过“投毒-解毒-银针”机制,自动化卡点发布流程,降低协同成本,提升发布安全性与效率,已在大型团队落地应用。
One Trick Per Day
本文总结Java开发中六大关键规范:避免HashMap初始化容量设置不当,禁用Executors创建线程池以防OOM,Arrays.asList不可变操作,优先使用entrySet遍历Map,SimpleDateFormat非线程安全需避免static,以及并发修改记录时合理加锁。遵循这些实践可提升系统稳定性与性能。
大数据与机器学习
大数据领域前沿技术分享与交流,这里不止有技术干货、学习心得、企业实践、社区活动,还有未来。