启用 SpringBoot Security 后登录 Web 页面需要用户名和密码的解决方法主要涉及到如何添加用户和授权认证的过程。
添加用户
可以通过在 application.yml 文件中配置用户名和密码来添加用户:
spring:
security:
user:
name: admin # 用户名
password: password # 密码
roles: ADMIN # 用户角色
以上配置将会创建一个名为 admin 的用户,密码为 password,角色为 ADMIN。
若需要添加其它用户,可以通过添加类似的配置来实现。
授权认证
添加用户后,我们需要对用户的访问权限进行授权认证。该过程主要包括三个步骤:
1. 定义用户角色
角色是一些操作的集合,我们可以使用 @PreAuthorize
注解来指定用户需要具有的角色才能进行相关操作:
@RestController
@RequestMapping("/api")
public class UserController {
@PreAuthorize("hasRole('ADMIN')")
@GetMapping("/users")
public List<User> getUsers() {...}
//...
}
以上代码表示,用户需要具有 ADMIN 角色才能访问 GET /api/users
接口。
2. 启用权限认证
我们需要在安全配置类中启用权限认证:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().authenticated().and().formLogin();
}
//...
}
以上代码表示,我们对所有请求启用了身份认证,并启用了表单登录方式(默认登录路径为 /login
)。
3. 添加用户认证信息
我们需要为用户添加认证信息,如用户名、密码和角色等信息。我们可以通过实现 UserDetailsService
接口来实现:
@Service
public class UserDetailsServiceImpl implements UserDetailsService {
@Override
public UserDetails loadUserByUsername(String username) {
List<GrantedAuthority> authorities = new ArrayList<>();
authorities.add(new SimpleGrantedAuthority("ADMIN"));
return new User("admin", "password", authorities);
}
}
以上代码表示,我们使用硬编码的方式为名为 admin 的用户添加了 ADMIN
角色,用户名为 admin,密码为 password。
示例1:添加多个用户
如果想添加多个用户,可以在配置文件中添加类似如下的配置:
spring:
security:
user:
name: admin
password: password
roles: ADMIN
name: user1
password: password1
roles: USER
示例2:使用数据库记录用户认证信息
如果想使用数据库记录用户认证信息,可以在 UserDetailsServiceImpl
中实现。以下是一个例子:
@Service
public class UserDetailsServiceImpl implements UserDetailsService {
@Autowired
private UserRepository userRepository;
@Override
public UserDetails loadUserByUsername(String username) {
User user = userRepository.findByName(username);
if(user == null) {
throw new UsernameNotFoundException("User not found");
}
List<GrantedAuthority> authorities = new ArrayList<>();
user.getRoles().forEach(role -> {
authorities.add(new SimpleGrantedAuthority(role.getName()));
});
return new User(user.getName(), user.getPassword(), authorities);
}
}
以上代码可以从数据库中查询出名为 username 的用户信息,将其角色信息添加到用户认证信息中。其中,User
表示数据库中用户记录的实体类,UserRepository
则是一个 JPA 接口,用于从数据库中查询用户信息。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:启用springboot security后登录web页面需要用户名和密码的解决方法 - Python技术站