본문 바로가기
개발공부 개발새발/Spring

Spring Security) permitAll() 의 비밀...

by 휴일이 2023. 1. 21.

 

얼마 전

티스토리에

web.ignoring() 설정으로

스프링 시큐리티가

정적 파일을 검사하지 않게 하는 설정을 했었는데..

 

https://hyuil.tistory.com/170

 

Spring Security 에서 web.ignoring()을 해도 정적 파일을 필터링해요 ㅠ

Spring Security 를 구현하다가 얘가 정적 파일도 계속 필터링 하는 것을 발견했다 ㅡㅜ 한번에 필터가 겁내 여러개 돌았다.. @Override public void configure(WebSecurity web) throws Exception { web.ignoring() // 정적파

hyuil.tistory.com

ㄴ 관련 글은 요깅 ^0^

 

 

 

 

근데 내가 맨 밑에다가

 

anyRequest.permitAll() 이라고 설정했는데도

무조건 모든 페이지에서 인증을 해야만하는

불상사가 일어났었다

 

 

사실 이거 이후로

구글링해서 하는 공부는 지쳐서

책을 사서 공부하고 있던 중에!!!

내가 궁금했던

permitAll() 의 비밀을 알게 되어서 기억하려고 적어둔다 !!

 

 

 

모든 엔드포인트(모르겠으면 걍 URL 이라고 생각하면 됨)를 접근 가능하게,

그러니까 모든 곳에 인증을 받지 않아도 들어갈 수 있다면

시큐리티는 인증을 수행하지 않는다

당연하지 머...그럴 필요가 없으니까

 

근데

내가 사용자 이름과 암호를 제공했을 때

그니까 요청에 사용자 이름과 암호가 들어가있는데

그 사용자가 확인되지 않는 사용자라고 뜨면?

걍 인증실패 401 권한없음이 떠버린다;;

 

 

그니까 permitAll() 은

응응 이름표없이 다 들어와도 돼~^0^ 갠차나~~~ 하다가

누가 여기 제 이름표에요~! 하면서 이름표를 같이 주면

그걸 검사하고

야ㅡㅡ너 여기 들어올 자격 없네? 나가ㅡㅡ 

하면서 401 권한 없음이 뜨는 거다;;

 

걍 사용자 암호가 없으면 검사 안 하고 들여보내주는데

있으면 굳이 검사하고 빠꾸맥이는거다....

 

 

이렇게만 들으면 어이없긴한데

시큐리티 구조상 당연한 거라고 한다(나도 지금 알았음)

왜냐구?

 

 

스프링에 시큐리티 프레임워크를 동작시키면

어떤 요청을 수행하기 전,

많은 시큐리티 필터들이 순서대로 동작하는데

 

권한 부여보다 인증필터가 먼저 돌아가서

인증이 오면 인증 필터로 무조건 검사를 하게 되어있다;;;

 

그니까 잘못된 인증이 오면?

해당 요청에 별다른 권한이 필요없더라도

권한 필터를 지나치기 전에 인증 필터가 도니까

인증 필터는 인증이 들어왔으면 인증을 해야되긴 하니까

인증을 했는데 잘못된 인증이니까

그냥 권한 없음을 띄워버리는 것이었다...

 

permitAll() 는 권한 부여만 건드리는 메서드기 때문에

인증이 실패하면 permitAll() 까지 가지도 않고

걍 401 권한 없음이 뜬다 ㅡㅡ!

 

 

 

그러면 어떻게 해야되냐?

 

근데 난 분명히 인증을 안 해도 인증을 하라고 떴던 걸 보니까

내가 친 코드 어딘가가 크게 잘못되어있을텐데

책 얼른 다 공부하고

만들었던 거 싹 다 갈아엎을 것...

 

 

 

 

400장  남음ㅎㅎ

명절 끝날때까지 다 할 수 있을가...

728x90