1、设置登录系统的账号、密码
方式一:在 application.properties
spring.security.user.name=qaqaq
spring.security.user.password=123456
方式二:通过配置类
在Spring Security 5.7.0-M2中,Spring就废弃了WebSecurityConfigurerAdapter
因为Spring官方鼓励用户转向基于组件的安全配置
参考如下两篇文章:
没有 WebSecurityConfigurerAdapter 的 Spring Security
Spring Security6配置方法(废弃WebSecurityConfigurerAdapter)_java_脚本之家 (jb51.net)
我的Spring Security版本为6.3.3
则编写配置类代码如下:
@Configuration
public class SecurityConfig {
@Bean
public InMemoryUserDetailsManager userDetailsService() {
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
String password = passwordEncoder.encode("123456");
UserDetails user = User.withDefaultPasswordEncoder()
.username("qaqaq")
.password(password)
.roles("admin")
.build();
return new InMemoryUserDetailsManager(user);
}
}
加密后没实现,不加密没问题,将withDefaultPasswordEncoder() 换成 builder() 可以实现加密
思维导图如下:
方式三:编写类实现接口
实际上 Spring Security 6.3.3 中如上述图片编写是不行的,
@Configuration
public class SecurityConfigTest {
@Autowired
private UserDetailsService userDetailsService;
@Bean
public InMemoryUserDetailsManager userDetailsService() {
UserDetails user = userDetailsService.loadUserByUsername("qaqaq");
return new InMemoryUserDetailsManager(user);
}
@Bean
PasswordEncoder password() {
return new BCryptPasswordEncoder();
}
}
//@Service("userDetailsService")
@Service
public class MyUserDetailsService implements UserDetailsService
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
if (username.equals("qaqaq")) {
List<GrantedAuthority> auths = AuthorityUtils.commaSeparatedStringToAuthorityList("role");
return new User("qaqaq", new BCryptPasswordEncoder().encode("123456"), auths);
}
return null;
}
}
这种写法也还是不行,没有实现
思维导图如下:
2、实现数据库认证来完成用户登录
思维导图如下: