관리자 페이지는 관리자만 볼 수 있게 만들고 싶거든요


처음에는 그냥 로그인을 하면 세션에 로그인 한 사용자의 Role을 넣어서

관리자 페이지 접근 할때마다 인터셉터에서 세션기반으로 확인을 했는데


생각해보니까 만약에 어떠한 사유(최고 관리자가 해당 관리자 권한을 박탈시킴)로 인해서 관리자 자격을 박탈당한다면

세션에는 해당 정보가 없어서 세션으로만 확인하면 관리자 박탈당한 사람이 게속 관리자 페이지를 볼 수 있을 것 같다는 시나리오가 생각되더라고요


-------------

그래서 몇가지 방법을 생각해봤었는데


1. 관리자 권한이 업데이트 되면 세션에도 업데이트를 해준다. (생각해봤는데 안됨)


- 로그인 -> 세션 저장하면서 서버에 캐시로 세션 아이디랑 세션에 넣은 객체를 매핑해서 저장해둔다. -> 관리자가 어떤 관리자의 권한을 박탈시킨다 -> 캐시에서 모든 세션을 뒤져서 박탈시킨 관리자의 객체인 것을 다 찾아내서 모두 관리자 권한이 사라진것을 업데이트 해준다.

근데 1번 방법은 애초에 모든 세션을 뒤지는것부터 뭔가 비용적으로 개손해같고, 뭔가 세션을 세션으로 사용하지 않는 느낌이라서 안될 것 같더라구요


2. 그래서 그냥 세션에 관리자 권한 저장하지말고, 관리자 권한이 필요한 곳에서는 게속 DB에서 권한 체크를한다.


라는 방법을 쓰려고 했는데,

보통 인터셉터에서는 service 레이어를 의존주입 받지 않는다고 하더라구요. 가능은한데 권장하는 방법은 아니라고...

그러면 굳이 인터셉터를 두고 컨트롤러에 권한체크하는 aop를 다 붙여줘야하나 그런 생각도 들더라구요

뭐 어떻게 하는게 좋을까요

게속 db체크해주는건 비용적인 측면에서 안좋을것으로 보이긴 한데
제가 아직 캐시까지는 공부하지 않아서 구현은 못하지만
캐시를 구현해서 디비에서 값이 변경되거나 조회될때 캐시에 먼저 저장하고 우선 캐시부터 확인하듯이 하면 어느정도 해결가능할 걸로 예상은되긴하는데 잘 모르겟네유...