主要是实现UserDetailsService接口BCryptPasswordEncoder类
一、引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
二、配置数据库
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql:///lld?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=123456
三、创建表
四、创建实体类
public class Users {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
五、创建mapper层
public interface UserMapper extends BaseMapper<Users> {
}
六、实现UserDetailsService这个重要接口
@Service
public class MyUserDetailService implements UserDetailsService {
@Autowired
private UserMapper userMapper;
@Override
public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException {
//定义查询条件
QueryWrapper<Users> wrapper = new QueryWrapper<>();
wrapper.eq("username",s);
//查询用户名
Users user = userMapper.selectOne(wrapper);
if (user == null) {
throw new UsernameNotFoundException("用户不存在");
}
//用户的权限
List<GrantedAuthority> auths = AuthorityUtils.commaSeparatedStringToAuthorityList("role");
//返回登录用户的用户名、密码(加密之后)、权限集合
return new User(user.getUsername(), new BCryptPasswordEncoder().encode(user.getPassword()),auths);
}
}
七、编写配置类加载mapper和向容器中添加BCryptPasswordEncoder
@Configuration
@MapperScan("com.lld.demo.mapper")
public class AppConfig {
@Bean
PasswordEncoder getEncoder() {
return new BCryptPasswordEncoder();
}
}
如果想自定义登录界面则将上述代码替换为:
@Configuration
@MapperScan("com.lld.demo.mapper")
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Bean
PasswordEncoder getEncoder() {
return new BCryptPasswordEncoder();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.formLogin()//自定义登录页面
.loginPage("/login.html")//页面路径
.loginProcessingUrl("/user/login")//登录访问路径
.defaultSuccessUrl("/test/lld").permitAll()//登录成功之后跳转的界面
.and().authorizeRequests()
.antMatchers("/test/hello","/user/login").permitAll()//不需要认证的路径
.anyRequest().authenticated()
.and().csrf().disable();
}
}