인증 관련) Spring Security에서의 인증관련 Configuration 설정, AuthenticationEntryPoint에 대하여
도움: https://kimchanjung.github.io/programming/2020/07/02/spring-security-02 ==> Spring Security에 대한 유용한 짧은 글(Security와 관련된 각종 중요 메서드와 커스텀 필터를 등록하는 방법 설명).
요약: Spring Security의 각종설정은 HttpSecurity를 이용하여 한다. 설정의 세부 내용이 방대하기 때문에 공식 문서를 참고해야함.
내가 만들어 놓은 API명세서를 보면서 별도로 인증이 필요하지 않은 URL요청을 모두 antMatchers()의 매개변수에 넣어준다. 우선 Auth와 관련된 API요청에서는 인증이 따로 필요하지 않다. Auth를 해야하는 페이지이기 때문에 그런것 같음ㅋㅋ
다음으로 Board영역 으로 가보면
Board영역에서는 GET과 관련된 API요청은 모두 인증이 필요없다. 이를 코드로 나타내면 아래와 같다.
"/" ==>기본적인 것은 인증이 필요없음
"/api/v1/auth/**" ==> api/v1/auth/ 로 시작하는 모든 패턴은 인증이 필요없음
HttpMethod.GET, "api/v1/board/**" ==> board 의 GET과 관련된 API는 전부다 인증이 필요없음
HttpMethod.GET, "api/v1/user/*" ==>api/v1/user로 시작하고 뒤에 하나의 항목만 더 오는url중 GET 메서드를 사용하는 url은 인증이 필요없다(GET이 아닌 다른 메서드면 인증이 필요한 경우도 있음!!)
"/file/**" ==> File같은 경우는 API가 아니기 때문에 API명세서에 따로 정의해 놓지는 않았지만 File역시 인증이 필요없다!
아... 이래서 API URL을 작명할 때 일관된 규칙을 적용해서 작명하는 규칙이 존재하는 것이구나... 규칙을 따르면 /** 라는 문법을 사용할 수 있는 것이다!!!
좋아요 기능은 인증이 필요한 것을 알수 있다. 어떻게? HTTP 헤더에 Authorization이 필요함!
게시물 삭제 또한 인증이 필요한것을 확인할 수 있음.
====================================================================
AuthenticationEntryPoint는 인증 예외가 발생했을때 의미가 있는 클래스임 (인증 예외가 발생했을시 어떻게 할 것인지를 결정하게 만듬)
내가 API명세서를 만들때 Response에 관한 내용으로 성공했을 때가 아닌 실패했을 때 몇가지 Response가 있었던 그 실패한 response API를 실제로 만들어 주는 것이 이 코드이다.
AuthenticationEntryPoint에 대하여 https://velog.io/@crow/AuthenticationEntryPoint-%EC%9D%B4%ED%95%B4
API명세서에
위와 같은 fail Response가 있는데 이것을 구현한 것이 아래코드의 response.setStatus(HttpServletResponse.SC_FORBIDDEN);이다.
=====================================================================================
Spring Boot에서 CORS설정하기
이제 앞서 작성했던 본 보안 설정(SecurityConfiguration) 클래스 코드에서
에 있는 cors를 CorsConfig.java에 작성해 주면 된다. 스프링부트에서 CORS를 어떻게 설정하는가는 아래글에 자세히 나와있다.
https://dev-pengun.tistory.com/entry/Spring-Boot-CORS-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0