下面我就来详细讲解如何用Spring Security从数据库中加载用户。
1. 创建数据表
首先我们需要在数据库中创建数据表,用于存储我们的用户信息,常用的表结构如下:
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(45) NOT NULL,
`password` varchar(60) NOT NULL,
`role` varchar(45) NOT NULL,
PRIMARY KEY (`id`)
);
其中,username
表示用户名,password
表示密码,role
表示用户角色。
2. 添加Spring Security依赖
在我们的Spring Boot项目中,需要添加Spring Security依赖,可以在pom.xml
中添加以下代码:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
3. 配置Spring Security
Spring Security的配置也非常简单,我们只需要在项目中创建一个实现了WebSecurityConfigurerAdapter
接口的配置类,并且覆盖其中的configure(HttpSecurity http)
和configure(AuthenticationManagerBuilder auth)
方法即可。
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private DataSource dataSource;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/admin/**").hasRole("ADMIN")
.antMatchers("/user/**").hasRole("USER")
.and().formLogin();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.jdbcAuthentication().dataSource(dataSource)
.usersByUsernameQuery("select username,password,true from users where username=?")
.authoritiesByUsernameQuery("select username,role from users where username=?");
}
}
在这里,我们通过注入DataSource
来使用Spring JDBC访问数据库,使用usersByUsernameQuery
和authoritiesByUsernameQuery
方法指定查询用户信息和用户角色的SQL语句。
4. 测试
现在我们可以开始测试使用Spring Security从数据库中加载用户了。下面是一个简单的控制器测试代码:
@RestController
public class TestController {
@GetMapping("/admin/test")
public String adminTest() {
return "Hello Admin";
}
@GetMapping("/user/test")
public String userTest() {
return "Hello User";
}
}
使用curl
命令或者Postman工具发送GET请求,分别访问http://localhost:8080/admin/test
和http://localhost:8080/user/test
,如果在访问之前,先用INSERT
语句往数据表中插入一个包含用户名、密码、角色的记录,访问相应的地址的时候就需要验证用户的身份了。
对于以上的例子,可以参考如下链接:
以上就是使用Spring Security从数据库中加载用户的完整攻略,希望对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Spring Security怎么从数据库加载我们的用户 - Python技术站