security 유효성 검사에서 403 error
면담(질문)
- 문제 상황 : 백오피스(ADMIN권한) 일 때, 유효성 검사 예외처리를 했으나 403 error로 뜨고 유효성 검사가 안됩니다.
- 해결 방법
아래의 코드는 WebSecurityConfig 클래스의 securityFilterChain 함수이다.
주석 처리된 부분을 추가하면 된다.
http.authorizeHttpRequests( (authorizeHttpRequests) ->
authorizeHttpRequests
.requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll()
.requestMatchers("/users/login", "/users/signup", "/api/users/refresh", "/users/login/kakao/**").permitAll()
.requestMatchers(HttpMethod.GET, "/orders", "/stores").permitAll()
.requestMatchers("/admin/**").hasAuthority("ADMIN")
// .requestMatchers("/error").permitAll()
.anyRequest().authenticated()
);
일단 내가 이해한 부분은
.requestMatchers("/admin/**) 이렇게 되면 url이 admin으로 시작을 하는데
그렇게 되면 security에서 다른 동작을 한다고 한다. context? 뭐가 안된다고 하셨는데.. 잘 모름ㅠ
튜터님께서 디버그로 돌려보셨을 때 유효성 검사를 하고 /error로 들어가게 되면서 유효성 검사 관련 에러가 아니라 403 Forbidden으로 떴던 것이다. 근데 나는 왜 저 /error가 표시가 안되는 거지? 여쭤봐야겠다.
다른분들은 아예 시큐리티 부분의 customExceptionHandler을 만들어서 전부 401 error 처리를 했거나
권한만 확인하는게 아니라 이름까지 함께 확인하는 식으로 해결하신 것 같았다.
* 참고
- Q : QueryDSL을 하려고 과제해설을 살펴보던 중 아래와 같이 Service와 ServiceImpl로 나뉜 것을 보았는데 저렇게 나누면 뭔가 더 좋나요?
- A : 어뎁터 패턴이며 확장성에 대비하여 사용된 것으로 보인다. 하지만 굳이 저렇게 사용해야 하는지에 대한 의견도 있다.
코드 카타
* 프로그래머스로 진행
- 알고리즘
- 없음
- SQL
- 헤비 유저가 소유한 장소
- 우유와 요거트가 담긴 장바구니
오늘의 회고
- 12시간 중 얼마나 몰입했는가?
이상하게 오늘은 오후에 심각하게 피곤했다.
커피를 마셔도 너무 피곤했다. 도저히 졸음이 안 사라질 정도로..
요즘따라 식곤증이 심해서 점심도 적게 먹었음에도 불구하고 심해서 오후에는 좀 잤다.
오전 중에는 자격증, 책 읽기, 튜터님께 질문가기 등등 많은 걸 한 것 같은데
튜터님께 질문 갔을 때랑 저녁에 면접 볼때 정도가 가장 집중력이 높았던 것 같다.
- 오늘의 생각
망할 QueryDSL 같으니라구
이거 일단 해보기는 하는데 어떻게 쓰는지를 감을 못 잡겠다.
밤 동안 마저 해보고 안되면 내일 오전에는 튜터님 붙잡아 놓고 해야겠어
- 내일 학습할 것은 무엇인지
이제는 진짜 QueryDSL 끝내야 한다.
그러고 Docker 강의 좀 듣고 자격증 문제 좀 풀어볼 예정이다.
시간 남으면 면접 관련 CS도 정리를 해놓고 싶다.