添加pom依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> <version>2.0.3.RELEASE</version> </dependency>
此依赖会加载 springsecurity5.0.6版本
做完权限功能后,发现登录异常缓慢,启动后的第一次登录需要14s,退出后登录需要7s。 把日志打印设置到debug级别,发现日志打印的时间有两个差距巨大的断层,没个断层有7秒,而且都是在 继承 UserDetailsService 这个类之前或者之后
进入自定义用户类之前一次打印为 o.s.s.authentication.ProviderManager - Authentication attempt using org.springframework.security.authentication.dao.DaoAuthenticationProvider
然后根据日志找到 ProviderManager.java 和 DaoAuthenticationProvider.java(在security的核心包core中)
![](https://www.codeprj.com/image/aHR0cHM6Ly9pbWFnZXMyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvODk5MjIzLzIwMTgwNy84OTkyMjMtMjAxODA3MjYxNDUzNDIyNjMtMTIzNDExMTk5Ni5wbmc=.png)
然后发现是标红处的执行时间特别长,然后断点一步步走下去
![](https://www.codeprj.com/image/aHR0cHM6Ly9pbWFnZXMyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvODk5MjIzLzIwMTgwNy84OTkyMjMtMjAxODA3MjYxNDU2MzcxNjktNTQzMDI4MjgucG5n.png)
在
BCrypt.checkpw(rawPassword.toString(), encodedPassword);卡死
原来是自己选用的密码加密器一直有问题
![](https://www.codeprj.com/image/aHR0cHM6Ly9pbWFnZXMyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvODk5MjIzLzIwMTgwNy84OTkyMjMtMjAxODA3MjYxNDU4MDc3MDYtNDg3NjQ2MzA0LnBuZw==.png)
然后果断修改一个, 这么多可以用的 最后选择用了 Md4PasswordEncoder 虽然已经过时了 但是为了验证是否是加密器的问题 还是修改了,改完之后,登录果然秒入了(修改了加密器 还需要修改密码 不然匹配方式不一样是不能登录的)
![](https://www.codeprj.com/image/aHR0cHM6Ly9pbWFnZXMyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvODk5MjIzLzIwMTgwNy84OTkyMjMtMjAxODA3MjYxNDU5MTIxNDYtNzg5MzM2NjY2LnBuZw==.png)
当然 看着过时类的横线不爽,自己还可以写一个 MD5的或者AES的 只要实现 org.springframework.security.crypto.password.PasswordEncoder 这个类的两个方法就行
![](https://www.codeprj.com/image/aHR0cHM6Ly9pbWFnZXMyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvODk5MjIzLzIwMTgwNy84OTkyMjMtMjAxODA3MjYxNTExNDQyMzEtMTY4NzEwNjM0MS5wbmc=.png)
我自己用MD5实现一个密码加密类。
添加完自定义类之后 还需要在配置文件中添加配置,修改密码后登录也是秒速
![](https://www.codeprj.com/image/aHR0cHM6Ly9pbWFnZXMyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvODk5MjIzLzIwMTgwNy84OTkyMjMtMjAxODA3MjYxNTEzMDkwNzctMTQ5MDM2NTgyNC5wbmc=.png)
|