Spring Boot 集成 Security,账号密码从数据库中查找
时间: 2024-03-22 07:16:11 浏览: 60
可以使用 Spring Security 的 UserDetailsService 接口来从数据库中查找账号密码。下面是一个示例:
首先,定义一个 User 实体类,包含用户名、密码和角色:
```java
@Entity
public class User implements UserDetails {
@Id
private String username;
private String password;
private String role;
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return Collections.singleton(new SimpleGrantedAuthority(role));
}
// 省略其他 UserDetails 方法
}
```
然后,实现 UserDetailsService 接口,从数据库中查找用户信息:
```java
@Service
public class UserService implements UserDetailsService {
@Autowired
private UserRepository userRepository;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
User user = userRepository.findById(username).orElseThrow(() ->
new UsernameNotFoundException("User not found"));
return user;
}
}
```
最后,配置 Spring Security,指定使用上面的 UserService:
```java
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserService userService;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin()
.and()
.httpBasic();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userService);
}
}
```
这样就完成了从数据库中查找账号密码的配置。需要注意的是,User 实体类必须实现 UserDetails 接口,同时包含用户角色信息。loadUserByUsername 方法返回的 UserDetails 对象也必须包含用户角色信息。配置时将 UserService 注入到 AuthenticationManagerBuilder 中即可。
阅读全文