[우아한테크코스] 5월 17일 TIL

1 minute read

[Error] cors 해결

@CrossOrigin(origins = "http://localhost:8081") 추가

[Spring] resolver와 interceptor의 역할

resolver는 로그인 시에 올바른 멤버로 로그인 하는지 확인하고 그 객체를 반환하는 역할
interceptor는 그 외에 로그인 되어있어야 하는 상황에 유효한 토큰을 가지고 있는지 확인하는 역할

원래 토큰을 발급하면 그때부터 헤더에 쿠키로 토큰이 달려서 간다.
따로 쿠키를 설정해줄 필요가 없는 것이다.
토큰 만료 시간도 서버에서 설정해주기 때문에 쿠키의 시간, 이름 등이 문제가 되지 않는다.
이번 미션에서 cors 문제로 인해 그것이 안되어서 헷갈렸던 것이다.

[Spring] 토큰이 있으면 인가된 것 아닌가?

내부적으로 사용자가 바뀌었을 상황을 고려해 검증이 필요하다?

[Spring] Spring Security

인증과 권한에 대한 부분을 filter에서 처리한다.
filter는 dispatcher servlet 가기 전에 적용된다.

  • principal(접근 주체): 자원에 접근하는 대상
  • credential(비밀번호): 자원에 접근하는 대상의 비밀번호

  • SecurityContextHolder: 보안 주체의 세부 정보를 포함해 응용프로그램의 현재 보안 컨텍스트에 대한 세부 정보 저장
  • SecurityContext: Authentication 보관
  • Authentication: 접근하는 주체의 정보와 권한 담는 인터페이스
  • UsernamePasswordAuthenticationToken: Authentication implements 한 하위 클래스, 첫번째 생성자는 인증 전의 객체 생성, 두번째 생성자는 인증 완료된 객체 생성
  • AuthenticationProvider: 실제 인증에 대한 부분 처리
  • AuthenticationManager: 여기에 AuthenticationProvider를 리스트로 가지고 있으며 모든 provider를 돌며 인증 처리

  • UserDetails: Authentication 객체를 구현한 UsernamePasswordAuthenticationToken을 생성하기 위해 사용
  • UserDetailsService: UserDetails 객체를 반환하는 메서드로 db와 연결해 처리
  • Password Encoding: AuthenticationManagerBuilder.userDetailsService().passwordEncoder()로 패스워드 암호화에 사용될 구현체 지정
  • GrantedAuthority: 사용자의 권한을 검사해 접근 허용 여부 결정

  • 비밀번호 암호화를 위해 사용
    implementation 'org.springframework.boot:spring-boot-starter-security' 추가

WebSecurityConfig 추가

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.formLogin().disable()
            .csrf().disable()
            .headers().frameOptions().disable(); //h2 연동  
    }

    @Bean
    public BCryptPasswordEncoder bCryptPasswordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

encoder 의존성 주입해서 사용