Spring spring

Spring中文网站 > Spring Security > Spring Security认账号密码是什么 Spring Security修改账号密码
Spring Security认账号密码是什么 Spring Security修改账号密码
发布时间:2026/02/08 11:08:17

  很多团队一开始把Spring Security当成一个登录拦截器来用,能弹出登录页就算接好了。真到线上换了账号密码却登不上,或者明明改了配置启动日志还在输出随机密码,才会意识到它认账号密码的来源不止一种。把认证链路和账号来源捋清楚,再去改密码会顺很多,排查也不会靠猜。

  一、Spring Security认账号密码是什么

 

  Spring Security认的账号密码,本质是看当前认证链路里到底启用了哪一种用户来源,再按对应规则做校验。你引入了spring-boot-starter-security但没有自定义用户体系时,Spring Boot会先给你一套默认用户,方便你快速把接口保护起来。

 

  1、默认情况下它会先认一个内置用户

 

  如果你只是加了安全依赖但没有提供自己的用户数据来源,默认用户通常是user,密码是随机生成并在应用启动时写到日志里,而且这个随机密码仅用于开发阶段。

 

  2、你在配置文件里写了账号密码它就改认你写的那套

 

  当你在application.yml或application.properties里配置spring.security.user.name与spring.security.user.password,默认用户就会被替换成你配置的账号密码,启动时也不再依赖随机密码那一行日志。

 

  3、你提供了自己的用户服务它就以你提供的为准

 

  一旦你自己定义了UserDetailsService或等价的用户加载方式,Spring Boot的默认UserDetailsService就会退场,Spring Security后续校验用户名时会走你的加载逻辑,密码校验也会走你指定的PasswordEncoder规则。

 

  4、接数据库时它认的是数据库里那条用户记录

 

  这类场景下用户名一般用来查用户,密码通常不是明文存储,而是以加密后的字符串保存,登录时会把输入密码与已存的加密串做匹配校验,而不是做明文比较。

 

  5、接LDAP或单点登录时它可能根本不在本系统里认密码

 

  当你把认证交给LDAP或外部身份系统,本系统更多是在认证成功后拿到用户身份与权限信息,密码修改也往往需要去身份源头处理,本系统只负责对接与放行。

 

  二、Spring Security修改账号密码

 

  改账号密码先别急着改一处就重启,先确认你现在到底走的是默认用户、内存用户、数据库用户还是外部身份源。不同来源的改法不一样,改错位置最常见的结果就是你以为改了,实际认证链路根本没用到那份数据。

 

  1、你用的是默认账号密码就改配置文件

 

  打开application.yml或application.properties,找到spring.security.user.name与spring.security.user.password,按你的目标值修改后重启应用,再用新账号密码登录验证。

 

  2、你用的是内存账号就去定义用户的地方改

 

  如果你是在配置类里写死了内存用户,修改点通常不在配置文件,而在你创建用户对象的位置;改完之后要特别留意密码是否按当前PasswordEncoder的规则保存,否则最常见就是账号能找到但密码永远不匹配。

 

  3、你用的是加密密码就先把加密方式定清楚再落库

 

  Spring Security推荐用DelegatingPasswordEncoder这类方式管理密码编码,存储的密码字符串通常带有类似{bcrypt}这样的前缀,用来标识采用的编码器;你在生成新密码摘要时也要生成同样风格的字符串,再写回到用户数据源里。

  4、改完密码后如果报id为null通常是存储格式不符合当前编码器规则

 

  常见现象是你把明文或不带前缀的加密串直接塞进去了,运行时匹配阶段找不到对应的编码器标识,就会抛出There is no PasswordEncoder mapped for the id null之类的异常;处理思路不是一味关掉加密,而是把密码存储格式与编码器配置对齐。

 

  5、需要做用户自助改密时把业务步骤补齐

 

  先校验旧密码是否匹配,再对新密码做编码后写入用户数据源,同时让当前登录态失效或要求重新登录,避免旧会话继续可用;如果你做了多端登录,还要考虑刷新令牌与并发会话的处理边界。

 

  6、如果你走的是LDAP或单点登录就去身份源改

 

  这类场景下应用里改spring.security.user.password不会生效,因为密码根本不在本应用里校验;你要在身份系统里修改,再确认应用侧的对接账号、绑定配置与回调地址等没有被改坏。

 

  三、Spring Security登录失败时如何定位账号密码问题

 

  账号密码改完登不上,最省时间的办法是按链路定位,先看当前到底走哪套用户来源,再看密码匹配在哪一步失败。只要把这两点锁死,问题范围会立刻缩小。

 

  1、启动日志还在输出随机密码通常说明你没接管默认用户

 

  如果你已经认为自己配置了账号体系,但启动时仍然打印Using generated security password那一行,大概率是你的自定义用户配置没有生效,或根本没有被应用加载到当前运行环境。

 

  2、账号能查到但总提示密码错误优先查PasswordEncoder是否一致

 

  典型问题是数据库里存的是bcrypt摘要,但项目里匹配时用的却不是同一种编码器,或者存储串缺少{bcrypt}这类标识前缀,导致匹配阶段直接走错分支。

 

  3、登录页反复跳转要把认证入口与放行规则查一遍

 

  表单登录的流程由过滤链驱动,登录页本身、静态资源、提交路径是否允许匿名访问都很关键;配置里一处放行规则写错,就会表现成你以为没登录成功但其实请求被重定向绕圈。

 

  4、同一套配置本地能登线上不能登多半是配置源覆盖

 

  线上环境变量、启动参数、配置中心可能覆盖了你本地的application.yml,尤其是账号密码这类敏感项经常被单独下发;定位时先确认最终生效值来自哪里,再决定改哪一层。

 

  5、账号密码没问题但权限不对就回到角色与授权逻辑

 

  很多时候登录已经成功,只是访问接口被拒绝;这时不要继续纠结账号密码,而是去核对用户的角色与资源权限映射,避免把授权问题当成认证问题来排。

  总结

 

  Spring Security认账号密码是什么,关键在于你当前启用的用户来源是哪一种,默认用户、配置文件用户、内存用户、数据库用户、外部身份源走的逻辑完全不同。Spring Security修改账号密码时先锁定来源,再把密码存储格式与编码器规则对齐,最后按启动日志与匹配异常去定位,就能把大多数登不上问题快速收敛到可改的点上。

读者也访问过这里:
180 1563 6924