【发布时间】:2022-10-05 23:23:33
【问题描述】:
我正在尝试在没有任何授权的情况下实现 Spring Boot 身份验证。如此简单的登录、注册和个人资料 api,其中登录和注册 api 已被允许所有人使用,而个人资料仅适用于经过身份验证的用户。
大多数教程都关注 RBAC 和身份验证,而我只想关注身份验证部分。
我已经在分散的教程的帮助下创建了基本结构。
我的身份验证控制器:
private final AuthService authService;
@PostMapping(\"/signin\")
public ResponseEntity<?> signin(@RequestBody SigninRequest signinRequest) {
String email = signinRequest.getEmail();
log.info(\"email : {}\", email);
String password = signinRequest.getPassword();
User user = authService.signin(email, password);
return ResponseEntity.ok().body(user);
}
@PostMapping(\"/signup\")
public ResponseEntity<User> signup(@RequestBody User user){
URI uri = URI.create(ServletUriComponentsBuilder.fromCurrentContextPath().path(\"/api/v1/auth/signup\").toUriString());
return ResponseEntity.created(uri).body(authService.signup(user));
}
我的 AuthServiceImpl:
public class AuthServiceImpl implements AuthService, UserDetailsService {
private final AuthRepository authRepository;
private final PasswordEncoder passwordEncoder;
@Override
public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
User user = authRepository.findByEmail(email);
if (user == null) {
throw new UsernameNotFoundException(email);
} else {
log.info(\"User found: {}\", user);
}
return new org.springframework.security.core.userdetails.User(user.getEmail(), user.getPassword(), new ArrayList<>());
}
@Override
public User signup(User user) {
String encodedPassword = passwordEncoder.encode(user.getPassword());
user.setPassword(encodedPassword);
return authRepository.save(user);
}
@Override
public User signin(String email, String password) {
// handle login ??
return user;
}
}
一切都很顺利,直到每个教程都达到将权限或角色发送回客户端的地步。我希望只进行此应用程序身份验证。
我现在的安全配置:
public class SecurityConfig extends WebSecurityConfigurerAdapter {
private final UserDetailsService userDetailsService;
private final BCryptPasswordEncoder bCryptPasswordEncoder;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
http.authorizeRequests()
.antMatchers(\"/api/v1/auth/signin\").permitAll()
.antMatchers(\"/api/v1/auth/signup\").permitAll()
.antMatchers(\"/api/v1/auth/profile\").authenticated();
http.httpBasic();
}
}
我的计划很简单:
- 用户可以注册
- 用户可以登录
- 登录后,将像往常一样发出访问令牌和刷新令牌
标签: spring spring-boot