这几天通过视频整合了security,遇到了几个细节,和大家分享一下
1、在thymeleaf页面引用sec标签的问题,一开始,因为我在pom文件中导入的是
<dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extrasspringsecurity5</artifactId>
<version>3.0.4.RELEASE</version>
</dependency>
在thymeleaf页面引用的是
xmlns:sec="http://www.thymeleaf.org/extras/spring-security5">
然后到页面中,其他倒是没错,但是sec标签不起作用,我找了好久,包括把引用和导入的都改成4,还是没有用,最后,突然找到,不管pom文件中导入什么,只要在thymeleaf页面引用
xmlns:sec="http://www.thymeleaf.org/extras/spring-security">
还是有点开心的,突然觉得自己还是有一点小笨
2、在定制认证规则的时候,通过重写 configure(AuthenticationManagerBuilder auth)方法定制规则,一开始我很直接,像这样:
//定制认证规则 @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { //super.configure(auth); auth.inMemoryAuthentication().withUser("zhangsan").password("123456").roles("VIP1","VIP2").and().withUser("lisi").password("123456").roles("VIP3","VIP2").and().withUser("wangwu").password("123456").roles("VIP1","VIP3");
}
结果控制台一直报错,也是通过百度,搜索了一下
原因:从spring security 5.X开始,需要使用密码编码器,也就是需要对你的明文密码进行加密,而不NoAppasswordEncoder(无密码编码器);
有三种解决方法:
1、
//办法一: //1.1 使用BCryptPasswordEncoder() auth .inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder()) .withUser("zhangsan").password(new BCryptPasswordEncoder().encode("123456")).roles("VIP1","VIP2") .and() .withUser("lisi").password(new BCryptPasswordEncoder().encode("123456")).roles("VIP3","VIP2") .and() .withUser("wangwu").password(new BCryptPasswordEncoder().encode("123456")).roles("VIP1","VIP3");
2、
//1.2 使用Pbkdf2PasswordEncoder()/ auth.inMemoryAuthentication().passwordEncoder(new Pbkdf2PasswordEncoder()) .withUser("zhangsan").password(new Pbkdf2PasswordEncoder().encode("123456")).roles("VIP1","VIP2") .and() .withUser("lisi").password(new Pbkdf2PasswordEncoder().encode("123456")).roles("VIP3","VIP2") .and() .withUser("wangwu").password(new Pbkdf2PasswordEncoder().encode("123456")).roles("VIP1","VIP3");
3、 自定义PasswordEncoders,需要实现PasswordEncoder 接口,这个就不写了,我用的是第一个。
暂时就这样。。