public void signup(SignupRequestDto signupRequestDto) {
String username = signupRequestDto.getUsername();
String password = signupRequestDto.getPassword();
// 회원 중복 확인
Optional<User> checkUsername = userRepository.findByUsername(username);
if(checkUsername.isPresent()){
throw new IllegalArgumentException("중복된 사용자가 존재합니다.");
}
User user = new User(username, password);
userRepository.save(user);
}
@PostMapping("/signup")
public String signup(@Valid @RequestBody SignupRequestDto signupRequestDto){
userService.signup(signupRequestDto);
return "성공";
}
spring으로 회원가입 기능을 만들어보았다.
사용자 이름과 비밀번호를 바디로 받아왔더니 전혀 예상하지 못했던 1이라는 숫자가 떴다.
구현하려고 만들어둔 AuthController 주석처리
-> 실패
Insomnia나 Postman으로 POST API를 호출할 때, spring security가 외부의 접근을 막기 때문에 401 error가 발생하는 경우가 있다고 한다.
(1) build.gradle의 dependency 중 spring-security를 주석처리
-> PasswordConfig, UserService의 PasswordEncoding 모두 주석처리
(2)
@EnableJpaAuditing
@SpringBootApplication(exclude = SecurityAutoConfiguration.class)
public class SpringLv2Application {
public static void main(String[] args) {
SpringApplication.run(SpringLv2Application.class, args);
}
}
이렇게 exclude로 자동설정을 끄기
Spring Boot 웹 어플리케이션에 security-starter를 추가하면 자동으로 웹 보안이 적용된다.
(모든 요청에 대한 인증 요청, 기본 사용자 및 패스워드 생성 등)
이러한 자동설정을 하는 클래스는 SecurityAutoConfiguration.class 이며 자동설정을 끄고 싶은 경우에는 @SpringBootApplication 어노테이션에 exclude로 SecurityAutoConfiguration.class를 읽어오지 못하게 설정하면 된다.
혹은 properties에
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration
를 추가하면 된다.
하지만 이 경우에 WebSecurity를 설정하려면 @EnableWebSecurity를 필수로 사용해야하고 Security 설정을 개발자가 모두 직접 만들어야 한다는 단점이 있다.