Package com.easydesk.web.screen
Class ScreenAccessInterceptor
java.lang.Object
com.easydesk.web.screen.ScreenAccessInterceptor
- All Implemented Interfaces:
org.springframework.web.servlet.HandlerInterceptor
@Component
public class ScreenAccessInterceptor
extends Object
implements org.springframework.web.servlet.HandlerInterceptor
컨트롤러 진입 전에 화면 접근 권한을 검사하는 인터셉터.
핸들러(메서드 우선, 없으면 클래스)에 붙은
Screen 의 화면 이름으로
ScreenAccessService.check(String, Long) 를 호출하고 결과에 따라 보낸다.
- ALLOWED : 컨트롤러로 진행
- LOGIN_REQUIRED : 로그인 화면으로 redirect (REST API 는 401 JSON)
- DENIED : HTTP 403 과 함께 access-denied 안내화면 (REST API 는 403 JSON)
Screen 이 없는 핸들러와 정적 리소스는 검사하지 않는다.
대상 Group 을 정하는 moduleId 는 URL 의 path variable 만 사용한다. query/form parameter 의 moduleId 는
쓰지 않는다 - Module 과 무관한 화면에 "?moduleId=내가 권한 있는 Module" 을 붙여서 다른 Group 의 권한으로
통과하는 것을 막기 위해서다. (그래서 TransactionContextHolder 의 moduleId 도 쓰지 않는다)
app.screen-access.enforce=false 로 두면 검사 결과를 로그로만 남기고 막지 않는다. 화면 Permission /
Role Permission 데이터를 맞추는 동안 관리 화면에 들어갈 수 없게 되는 상황을 피하기 위한 스위치다.-
Field Summary
Fields -
Constructor Summary
ConstructorsConstructorDescriptionScreenAccessInterceptor(ScreenAccessService screenAccessService, org.springframework.context.MessageSource messageSource, com.fasterxml.jackson.databind.ObjectMapper objectMapper, boolean enforce) -
Method Summary
Modifier and TypeMethodDescriptionbooleanpreHandle(HttpServletRequest request, HttpServletResponse response, Object handler) Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.springframework.web.servlet.HandlerInterceptor
afterCompletion, postHandle
-
Field Details
-
SCREEN_ACCESS_ATTRIBUTE
검사 결과를 담아 두는 request attribute 이름 (디버그 박스 표시용) -
ACCESS_DENIED_VIEW
권한이 없을 때 보여주는 안내화면의 view name- See Also:
-
-
Constructor Details
-
ScreenAccessInterceptor
public ScreenAccessInterceptor(ScreenAccessService screenAccessService, org.springframework.context.MessageSource messageSource, com.fasterxml.jackson.databind.ObjectMapper objectMapper, @Value("${app.screen-access.enforce:true}") boolean enforce)
-
-
Method Details
-
preHandle
public boolean preHandle(@NonNull HttpServletRequest request, @NonNull HttpServletResponse response, @NonNull Object handler) throws Exception - Specified by:
preHandlein interfaceorg.springframework.web.servlet.HandlerInterceptor- Throws:
Exception
-