升级到spring security5遇到的坑-密码存储格式

 

遇到的问题 
将spring security oauth2(包括spring security)升级到最新,代码没有改动,运行项目没有报错,可是页面登录时报错:There is no PasswordEncoder mapped for the id “null”html

而后一顿百度和google,其中看到两处有帮助的资料: 
http://www.javashuo.com/article/p-odcvddzw-md.html 
https://spring.io/blog/2017/11/01/spring-security-5-0-0-rc1-released前端

总的来讲就是,人家把spring security的密码存储格式改了,没办法,用人家的东西就要按照人家规定的作,将全部的密码格式改掉吧。java

格式:{id}encodedPasswordspring

这id是一个标识符,用于查找是哪一个PasswordEncoder,也就是你密码加密的格式所对应的PasswordEncoder。encodedPassword是指原始加密后的密码(有点绕,简单来讲就是你原来存储的密码)。在id必须在密码的开始,id先后必须加{}。若是id找不到,id则会为空。 
spring security中的全部默认的密码格式都是在PasswordEncoderFactories这个 类中,能够进入这个类中自行查看。数据库

注意: 
1. 前端发送的登录密码,是不须要为{id}encodedPassword格式的。 
2. 若是你配置了spring security oauth2安全

@Override public void configure(ClientDetailsServiceConfigurer clients) throws Exception { clients.inMemory().withClient("client").secret("{noop}secret") .authorizedGrantTypes("client_credentials", "password", "refresh_token").scopes("all"); }
  • 1
  • 2
  • 3
  • 4
  • 5

代码中的secret也必须{id}encodedPassword格式。app

https://blog.csdn.net/smollsnail/article/details/78934188ide

 

情景:oop

在一个后台admin系统中,为了安全用到Spring Security,我开启了in-memory方式(就是登录后,在内存中先认证,是否内存中写死的帐号是否就是用户登陆的那个帐号,密码),可是又在其后面加入了“从数据库中查找出该帐号是否存在”,这种认证方式。google

在这两种方式下,我登陆,先输入一个在数据库中存在的帐号,显示,正常登陆进来。

又一次登陆后,我输入一个在数据库中找不到可是在内存中写死的帐号,系统报异常,可是正常登陆进来。

再一次登陆后,我输入一个既不在数据库中,也不在内存中的帐号,此次,真登陆不了了。

那么,这是否是就证实了,在这两种方式下,默认先去数据库中查找,而后无论成功与否“或上”(||)是否为内存中的帐号。

https://blog.csdn.net/u012582402/article/details/54292488

 

 

解决springsecurity资源权限一次加载,致使角色授资源要重启服务问题

https://blog.csdn.net/y666666y/article/details/70212064

 

 

 

https://www.baeldung.com/spring-security-5-default-password-encoder

相关文章
相关标签/搜索