SpringSecurity自定义用户名和密码的实现
在SpringBoot项目中导入SpringSecurity依赖
1、在SpringBoot项目中的pom.xml文件中添加SpringSecurity依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
2、启动SpringBoot项目中的启动类
在控制台中出现这个密码,这就是我们没有实现自定义密码,SpringSecurity帮我们自动生成的密码。
3、拿到这个密码后,我们就可以使用SpringSecurity为我们自动生成的账号和密码登录了
出现下面的页面说明我们已经登录成功了(因为我没有写任何东西,所以页面会出现404异常)。
自定义用户名和密码登录的实现
自定义用户名和密码登录的实现方法有三种:
第一种:配置文件的实现
第二种:继承WebSecurityConfigurerAdapter类,并且将BCryptPasswordEncoder对象交给Spring容器管理。
第三种:实现UserDetailsService接口,从数据库中查找用户名和密码
【注意事项】:三个方法只能选其一,不可以同时存在。
第一种实现方式:配置文件的实现
spring:
security:
user:
name: "admin"
password: "admin123"
roles: "admin"
这样就是只能按照规定的用户名和密码登录了,再次启动SpringBoot项目时,SpringSecurity也不会自动帮助我们生成密码了。
第二种实现方式:继承WebSecurityConfigurerAdapter类,并且将BCryptPasswordEncoder对象交给Spring容器管理。
我们首先写一个配置类,并且使用@Configuration注解标记这个配置类,这样在启动SpringBoot的启动类时,Spring会自动将这个配置类交给Bean管理。继承WebSecurityConfigurerAdapter类,重写configure()方法。
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication().withUser("admin") // 用户名
.password(passwordEncoder().encode("admin123")) // 密码
.authorities("admin"); // 权限集合
}
@Bean
public BCryptPasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
第三种:实现UserDetailsService接口,从数据库中查找用户名和密码
1、目前数据库中的数据表中有两条数据
2、在pom文件中导入MyBatis-Plus(或者Mybatis)和数据库依赖
<!--导入MyBatis-Plus依赖 用来操作数据库-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
<!--导入数据库依赖来配置数据源找到数据库-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
3、创建实体类
import java.io.Serializable;
public class Users implements Serializable {
private static final long serialVersionUID = -2950916241569716094L;
private Integer id;
private String username;
private String password;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
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 "Users{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
4、创建Mapper接口并且继承BaseMapper<实现类>接口,这样可以用MyBatis-Plus操作数据库了
@Mapper
public interface UserMapper extends BaseMapper<Users> {
}
5、创建自定义服务类实现UserDetailsService接口
【先到这里,下午继续写…】