认证源码分析与自定义后端认证逻辑

简介: 本文深入分析Spring Security认证流程,从UsernamePasswordAuthenticationFilter到AuthenticationManager,层层解析认证机制。重点剖析AbstractUserDetailsAuthenticationProvider与UserDetails的实现,并详解自定义用户认证逻辑的编写与配置。最后通过注册自定义UserDetailsService,实现数据库认证。完整代码见GitHub仓库Day02分支。(238字)

1.认证流程分析
UsernamePasswordAuthenticationFilter
先看主要负责认证的过滤器UsernamePasswordAuthenticationFilter,有删减,注意注释。
AuthenticationManager
由上面源码得知,真正认证操作在AuthenticationManager里面!
AbstractUserDetailsAuthenticationProvider
咱们继续再找到AuthenticationProvider的实现类AbstractUserDetailsAuthenticationProvider:
AbstractUserDetailsAuthenticationProvider
按理说到此已经知道自定义认证方法的怎么写了,但咱们把返回的流程也大概走一遍,上面不是说到返回了一个 UserDetails对象对象吗?
跟着它就又回到AbstractUserDetailsAuthenticationProvider对象中authenticate方法最后一行了。
UsernamePasswordAuthenticationToken
来到UsernamePasswordAuthenticationToken对象发现里面有两个构造方法
AbstractAuthenticationToken
再点进去super(authorities)看看:
由此,咱们需要牢记自定义认证业务逻辑返回的UserDetails对象中一定要放置权限信息! 现在可以结束源码分析了?先不要着急! 咱们回到最初的地方UsernamePasswordAuthenticationFilter,你看好看了,这可是个过滤器,咱们分析这么 久,都没提到doFilter方法,你不觉得心里不踏实?可是这里面也没有doFilter呀?那就从父类找!
AbstractAuthenticationProcessingFilter
点开AbstractAuthenticationProcessingFilter,删掉不必要的代码!
可见AbstractAuthenticationProcessingFilter这个过滤器对于认证成功与否,做了两个分支,成功执行 successfulAuthentication,失败执行unsuccessfulAuthentication。
在successfulAuthentication内部,将认证信息存储到了SecurityContext中。并调用了loginSuccess方法,这就是常见的“记住我”功能!此功能具体应用,咱们后续再研究!
2.自定义认证实现流程
1.实现UserDetailService与自定义逻辑
自定义用户类需要实现UserDetails接口,并实现接口的方法,所以我们编写下述代码。
2.注册自定义实现类
Java
运行代码
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package com.yzxb.SpringSecurity.config;

import com.yzxb.SpringSecurity.service.MyUserService;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

import javax.annotation.Resource;

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Resource
private MyUserService myUserService;

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
            .anyRequest().authenticated()
            .and().formLogin().loginPage("/login.html")
            .loginProcessingUrl("/doLogin")
            .defaultSuccessUrl("/demo/index ")
            .failureUrl("/login.html")
            .usernameParameter("uname")
            .passwordParameter("passwd")
            .permitAll()
            .and()
            .csrf()
            .disable();
}

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.userDetailsService(myUserService);
}

}
改完的效果如下图
然后重启项目,就可以实现自定义的数据库认证逻辑。
3.完整代码获取
git仓库地址:https://github.com/Herbbbb/SpringSecurity.git
分支名称:Day02-用户自定义认证

相关文章
|
9月前
|
SpringCloudAlibaba Java Nacos
SpringCloud概述
Spring Cloud是Spring推出的微服务统一解决方案,弥补了各技术分散的不足,具备约定优于配置、组件丰富、开箱即用等特点。通过伦敦地铁站命名版本,避免与子项目版本冲突。Spring Cloud Alibaba融合阿里开源组件(如Nacos、Sentinel、Seata等),提供完整微服务生态,因Netflix组件停更,现成为主流选择。本节介绍其诞生背景、版本机制及技术体系,为后续实战奠定基础。
|
6月前
|
JSON 监控 测试技术
微服务接口设计全解:RESTful/RPC 规范、兼容方案与生产级实战
本文系统阐述微服务接口设计规范,涵盖RESTful与RPC两大体系:明确接口作为行为契约的本质,提出语义清晰、兼容稳定、高性能等五大设计目标;详解URI设计、HTTP方法/状态码、请求响应体等RESTful规范,并给出完整代码实例;解析RPC的契约优先、幂等性、序列化等核心要求;对比二者差异,提供选型指南与灰度发布、多版本共存等生产级兼容方案,助力构建高可靠微服务架构。
751 4
|
2月前
|
JSON Shell API
Claude Code 转向 Codex 实战指南:12 项关键配置与 1 个踩坑记录
从 Claude Code 迁移到 Codex,基本上就是一场重命名加重排格式的活儿,而 Codex 如今还自带一条单命令导入器,帮你完成其中大部分工作。真正的麻烦藏在它遗留下来的东西里,而其中一项根本就不是配置文件。
|
10月前
|
Prometheus 运维 监控
监控没做好,DevOps等于裸奔:Prometheus + ELK 的“稳态运营秘籍”
监控没做好,DevOps等于裸奔:Prometheus + ELK 的“稳态运营秘籍”
475 26
|
3月前
|
缓存 前端开发 JavaScript
阿里云CDN+OSS静态资源全链路优化实战,解决跨境电商外贸独立站海外加载慢问题
本文针对跨境电商平台静态资源体积大、缓存混乱、海外延迟高等痛点,基于阿里云OSS与CDN,提出“自动压缩+智能缓存+防盗链”四层优化方案,已落地Taoify项目,海外首屏提速超60%,显著改善LCP与Core Web Vitals指标。(239字)
300 0
|
机器学习/深度学习 数据采集 人工智能
基于生成式物理引擎的AI模型训练方法论
本文探讨了基于生成式物理引擎的AI模型训练方法论,旨在解决传统数据采集高成本、低效率的问题。生成式物理引擎结合物理建模与生成模型(如GAN、Diffusion),可模拟现实世界的力学规律,生成高质量、多样化的虚拟数据。文章介绍了其关键技术,包括神经网络物理建模、扩散模型场景生成及强化学习应用,并分析了其在机器人学习、数据增强和通用智能体训练中的实践价值。未来,随着可微物理引擎、跨模态生成等技术发展,生成式物理引擎将助力AI从静态监督学习迈向动态交互式世界建模,推动通用人工智能的实现。
825 57
基于生成式物理引擎的AI模型训练方法论
|
5月前
|
存储 消息中间件 BI
如何通过阿里云接入招投标数据:从市场购买到业务上线全流程指南
本文详解如何通过阿里云市场(集成世舶科技等服务商)快速接入招投标API:涵盖选购试用、AppCode认证、多维筛选调用、Serverless自动拉取、RocketMQ解耦、RDS+Tair存储及Quick BI分析,助力企业构建数据驱动的商机获取体系。
874 3
|
11月前
|
安全 数据可视化 开发者
有什么值得推荐的网站源码分享下载?
本文指出开发者找优质安全网站源码耗时,介绍了多种获取渠道:有 GitHub 等综合开源社区,虽资源多但新手筛选难;有垂直领域平台,其中 PageAdmin CMS 系统因源码完整、易上手、扩展性强受青睐;还有贴合国内需求的国内社区。同时提醒注意版权与安全检测,助力开发者高效搭建项目。
1206 9
|
5月前
|
人工智能 机器人 API
阿里云轻量应用服务器部署OpenClaw图文攻略|LINE集成+千问Qwen3.6-Plus配置及常见问题解答
2026年,开源AI智能体框架OpenClaw(曾用名Clawdbot,被称为“龙虾AI”)凭借轻量化、强执行、多平台接入的特性,成为个人与团队搭建专属AI助手的首选方案。它打破传统AI“只说不做”的局限,实现“理解指令→规划任务→自动执行→结果反馈”的全闭环,覆盖自动化办公、跨平台协作、消息处理等场景。阿里云轻量应用服务器以低门槛、高性价比、免运维的优势,完美适配OpenClaw 7×24小时稳定运行需求;集成LINE后,可实现全球主流社交平台的单聊/群聊AI交互,无缝触达海外用户;搭配阿里云千问Qwen3.6-Plus大模型,解锁超长上下文、深度推理与精准任务执行能力
511 5
|
9月前
|
JSON API 数据库
如何写好一篇技术方案
本模板用于规范产品需求文档,涵盖项目背景、变更记录、功能模块、流程图、API设计等内容,支持语雀卡片与文件附件,提升团队协作效率。

热门文章

最新文章