230622 postman 401 unauthorized

보트·2023년 6월 22일
1

Spring

목록 보기
6/27
post-thumbnail

문제


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 설정을 개발자가 모두 직접 만들어야 한다는 단점이 있다.

profile
일주일에 한 번

0개의 댓글