携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第25天,点击查看活动详情
如何对密码进⾏加密?
如果我们需要保存密码这类敏感数据到数据库的话,需要先加密再保存。
Spring Security 提供了多种加密算法的实现,开箱即⽤,⾮常⽅便。这些加密
算法实现类的⽗类是 PasswordEncoder ,如果你想要⾃⼰实现⼀个加密算法的 话,也需要继承 PasswordEncoder 。
PasswordEncoder 接⼝⼀共也就 3 个必须实现的⽅法。
官⽅推荐使⽤基于 bcrypt 强哈希函数的加密算法实现类。
如何优雅更换系统使⽤的加密算法?
如果我们在开发过程中,突然发现现有的加密算法⽆法满⾜我们的需求,需要 更换成另外⼀个加密算法,这个时候应该怎么办呢? 推荐的做法是通过 DelegatingPasswordEncoder 兼容多种不同的密码加密⽅案, 以适应不同的业务需求。
从名字也能看出来, DelegatingPasswordEncoder 其实就是⼀个代理类,并⾮是 ⼀种全新的加密算法,它做的事情就是代理上⾯提到的加密算法实现类。在 Spring Security 5.0之后,默认就是基于 DelegatingPasswordEncoder 进⾏密码 加密的。
将⼀个类声明为 Bean 的注解有哪些?
@Component :通⽤的注解,可标注任意类为 Spring 组件。如果⼀个
Bean 不知道属于哪个层,可以使⽤ @Component 注解标注。
@Repository : 对应持久层即 Dao 层,主要⽤于数据库相关操作。
@Service : 对应服务层,主要涉及⼀些复杂的逻辑,需要⽤到 Dao 层。
@Controller : 对应 Spring MVC 控制层,主要⽤户接受⽤户请求并调⽤ Service 层返回数据给前端⻚⾯。
@Component 和 @Bean 的区别是什么?@Component 注解作⽤于类,⽽ @Bean 注解作⽤于⽅法。
@Component 通常是通过类路径扫描来⾃动侦测以及⾃动装配到 Spring 容 器中(我们可以使⽤ @ComponentScan 注解定义要扫描的路径从中找出标 识了需要装配的类⾃动装配到 Spring 的 bean 容器中)。 @Bean 注解通 常是我们在标有该注解的⽅法中定义产⽣这个 bean, @Bean 告诉了 Spring 这是某个类的实例,当我需要⽤它的时候还给我。 @Bean 注解⽐ @Component 注解的⾃定义性更强,⽽且很多地⽅我们只 能通过 @Bean 注解来注册 bean。⽐如当我们引⽤第三⽅库中的类需要装 配到 Spring 容器时,则只能通过 @Bean 来实现。