1. 문제상황
가입할 때, 권한을 주는데 로그인 후 필터에서 특정 URL에 대하여 오너(OWNER) 권한을 가진 사용자만 접근 할 수 있도록 제한하는 로직을 구현하였습니다.
2. 구현 내용
특정 URL에 OWNER 권한을 가진 사용자만 접근할 수 있도록 제한을 하는 필터입니다. 권한이 없는 사용자 혹은 로그인하지 않은 사용자가 접근을 하려고 할 때에는 401 Unauthorized 상태와 메시지를 반환합니다.
핵심 로직
i) URL 매칭
- 특정 URL 패턴이 OWNER 전용 경로인지 확인한다.
- PatternMatchUtils.simpleMatch를 활용하여 요청 URL과 정의된 경로를 비교합니다.
private boolean isForOwner(String requestUrl){
return PatternMatchUtils.simpleMatch(FOR_OWNER, requestUrl);
}
ii) 세션 확인
- 요청 세션이 있는지 확인합니다.
- 세션이 없거나 유효하지 않다면 접근을 차단합니다.
iii) 권한을 확인
- 세션에서 사용자 정보를 가져와서 권한(OWNER)을 확인
- 권한이 OWNER가 아니라면 접근을 제한합니다.
iV) 응답 처리
- 제한된 경우 401과 메시지를 반환합니다.
- HttpServletResponse로 클라이언트에 적절한 응답을 전달합니다.
3. 핵심 개념 및 학습내용
i) Filter의 역할
- HTTP 요청/응답 처리 단계에서 특정 조건에 따라 요청을 중단하거나 추가 로직을 수행할 수 있습니다.
- 보통 보안, 로깅, 데이터 변환 등에 활용합니다.
ii) 세션 및 권한 검증
- HttpSession을 통해 로그인 상태와 사용자 정보를 확인합니다.
- 세션 객체는 필요한 데이터를 저장하고, 권한 확인 시 활용합니다.
iii) URL 패턴 매칭
- Spring의 PatternMatchUtils.simpleMatch로 간단한 URI 경로 매칭이 가능합니다.
- 정규 표현식 수준의 복잡한 URL 매칭이 필요하지 않은 경우 유용합니다.
iV) 응답 처리
- HttpServletResponse를 사용하여 상태 코드, 메시지 등을 명시적으로 설정.
4. 확장 가능성
- 다양한 권한별 접근 제한을 추가할 수 있습니다.
- Spring Security로 전환 하여 더 강력하고 확장 가능한 보안 로직으로 대체 할 수도 있습니다.
5. 내일 해야하는 것
- 리뷰 구현
'TIL' 카테고리의 다른 글
TIL) jpa 프로젝트 트러블 슈팅 (1) | 2024.12.17 |
---|---|
TIL) Self Join (2) | 2024.12.06 |
TIL) 테스트 코드 작성 (1) | 2024.12.03 |
TIL) 디자인 패턴 (1) | 2024.12.02 |
TIL) n^2 배열 자르기 (1) | 2024.11.29 |