일단 시작.

[TIL] http.authorizeHttpRequests.requestMatchers API 설정(정확한 해결 방법 추가 기록 필요) 본문

STUDY/SpringBoot

[TIL] http.authorizeHttpRequests.requestMatchers API 설정(정확한 해결 방법 추가 기록 필요)

꾸양! 2023. 7. 10. 23:58

이슈

스프링 부트로 블로그를 만드는 과제를 하고 있는데 내가 작성한 포스트 조회에 대한 API 명세서는 이러하였다.

이름 Method URL
전체 게시글 조회 GET /JisooBlog
선택 게시글 조회 GET /JisooBlog/1

이 두 기능은 인가 필터와 인증 필터를 거치지 않고 비회원에도 보여질 수 있게끔 하기 위해서 설정이 필요했다. WebSecurityConfig 클래스에서 http.authorizeHttpRequests.requestMatchers 설정을 해주면 되겠다 생각해서

http.authorizeHttpRequests((authorizeHttpRequests) ->
	authorizeHttpRequests
			.requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll()
			.requestMatchers("/JisooBlog/user/**").permitAll()
			.requestMatchers("/JisooBlog").permitAll()
			.anyRequest().authenticated()
);

다음과 같이 경로를 permitAll()하게끔 하면 될 줄 알았는데 전체 게시글 조회는 잘 되는데 선택 게시글 조회에서 forbidden 404 상태코드가 나왔다.


일단 해결(하였으나 추가 기록 필요)

requestMatchers()에서 주소를 어떻게 고쳐야 할 지 잘 모르겠어서 아예 API를 다음과 같이 수정하였다.

이름 Method URL
전체 게시글 조회 GET /JisooBlog/view/all
선택 게시글 조회 GET /JisooBlog/view/1

코드도 다음과 같이 수정하였다.

http.authorizeHttpRequests((authorizeHttpRequests) ->
	authorizeHttpRequests
			.requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll()
			.requestMatchers("/JisooBlog/user/**").permitAll()
			.requestMatchers("/JisooBlog/view/**").permitAll()
			.anyRequest().authenticated()
);

다음과 같이 코드를 수정하니 인증, 인가 필터를 거치지 않고 요청이 잘 보내졌다.


+

위와 같은 상황에서 API 명세를 바꾸지 않고 경로를 지정해주는 방법이 있었을까? 그 부분에 관해서는 튜터님께 여쭤보고 추가적으로 기록해야 할 것 같다.