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 Details

    • SCREEN_ACCESS_ATTRIBUTE

      public static final String SCREEN_ACCESS_ATTRIBUTE
      검사 결과를 담아 두는 request attribute 이름 (디버그 박스 표시용)
    • ACCESS_DENIED_VIEW

      public static final String 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