🌃 TIL

security 유효성 검사에서 403 error

MNY 2024. 7. 8. 23:58
728x90
반응형

면담(질문)

  • 문제 상황 : 백오피스(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()
);

 

 

Web

Graceful shutdown is supported with all four embedded web servers (Jetty, Reactor Netty, Tomcat, and Undertow) and with both reactive and servlet-based web applications. It occurs as part of closing the application context and is performed in the earliest

docs.spring.io

일단 내가 이해한 부분은 

.requestMatchers("/admin/**) 이렇게 되면 url이 admin으로 시작을 하는데

그렇게 되면 security에서 다른 동작을 한다고 한다. context? 뭐가 안된다고 하셨는데.. 잘 모름ㅠ

 

튜터님께서 디버그로 돌려보셨을 때 유효성 검사를 하고 /error로 들어가게 되면서 유효성 검사 관련 에러가 아니라 403 Forbidden으로 떴던 것이다. 근데 나는 왜 저 /error가 표시가 안되는 거지? 여쭤봐야겠다.

 

다른분들은 아예 시큐리티 부분의 customExceptionHandler을 만들어서 전부 401 error 처리를 했거나

권한만 확인하는게 아니라 이름까지 함께 확인하는 식으로 해결하신 것 같았다.

 

* 참고

 

Web

Graceful shutdown is supported with all four embedded web servers (Jetty, Reactor Netty, Tomcat, and Undertow) and with both reactive and servlet-based web applications. It occurs as part of closing the application context and is performed in the earliest

docs.spring.io

 

Authorize HttpServletRequests :: Spring Security

While using a concrete AuthorizationManager is recommended, there are some cases where an expression is necessary, like with or with JSP Taglibs. For that reason, this section will focus on examples from those domains. Given that, let’s cover Spring Secu

docs.spring.io

 

  • Q : QueryDSL을 하려고 과제해설을 살펴보던 중 아래와 같이 Service와 ServiceImpl로 나뉜 것을 보았는데 저렇게 나누면 뭔가 더 좋나요?
    • A : 어뎁터 패턴이며 확장성에 대비하여 사용된 것으로 보인다. 하지만 굳이 저렇게 사용해야 하는지에 대한 의견도 있다.
 

2일차 - QueryDSL · thesun4sky/jpa@e8f6d9a

teasun committed Jan 31, 2023

github.com

 

 

 


코드 카타

* 프로그래머스로 진행

 

  • 알고리즘
    • 없음
  • SQL
    • 헤비 유저가 소유한 장소
    • 우유와 요거트가 담긴 장바구니
 

[프로그래머스][MySQL]우유와 요거트가 담긴 장바구니(Summer/Winter Coding(2019) )

CART_PRODUCTS 테이블은 장바구니에 담긴 상품 정보를 담은 테이블입니다. CART_PRODUCTS 테이블의 구조는 다음과 같으며, ID, CART_ID, NAME, PRICE는 각각 테이블의 아이디, 장바구니의 아이디, 상품 종류, 가

velog.io

 


오늘의 회고

  • 12시간 중 얼마나 몰입했는가?

이상하게 오늘은 오후에 심각하게 피곤했다.

커피를 마셔도 너무 피곤했다. 도저히 졸음이 안 사라질 정도로..

요즘따라 식곤증이 심해서 점심도 적게 먹었음에도 불구하고 심해서 오후에는 좀 잤다.

오전 중에는 자격증, 책 읽기, 튜터님께 질문가기 등등 많은 걸 한 것 같은데

튜터님께 질문 갔을 때랑 저녁에 면접 볼때 정도가 가장 집중력이 높았던 것 같다.

 

  • 오늘의 생각

망할 QueryDSL 같으니라구

이거 일단 해보기는 하는데 어떻게 쓰는지를 감을 못 잡겠다.

밤 동안 마저 해보고 안되면 내일 오전에는 튜터님 붙잡아 놓고 해야겠어

 

  • 내일 학습할 것은 무엇인지

이제는 진짜 QueryDSL 끝내야 한다.

그러고 Docker 강의 좀 듣고 자격증 문제 좀 풀어볼 예정이다.

시간 남으면 면접 관련 CS도 정리를 해놓고 싶다.

728x90
반응형