Spring Security JSP 권한 처리 및 로그인 상태 표시
실무 가이드: Spring Security JSP 권한 처리 및 로그인 상태 표시
이 문서에서는 Spring Security를 활용해 JSP에서 로그인 상태에 따라 메뉴를 동적으로 보여주는 방법을 실제 예제로 설명합니다. 또한 CSS, JS 같은 정적 리소스에 대한 접근 제어 문제와 security="none" 설정이 예상대로 동작하지 않을 때 점검해야 할 사항을 함께 다룹니다. Spring Security JSP 권한 처리 및 로그인 상태 표시를 중심으로 실무 적용에 바로 쓸 수 있는 핵심 팁을 정리했습니다.
1. JSP에서 로그인 상태별 메뉴 표시
Spring Security의 JSP 태그 라이브러리를 쓰면 로그인 여부를 쉽게 검사해 메뉴를 분기할 수 있습니다. 간단한 태그만으로 익명 사용자와 인증된 사용자를 구분하고, 사용자 정보를 뷰에 안전하게 전달할 수 있습니다.
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags"%>
<!-- 익명 사용자만 로그인 링크 표시 -->
<sec:authorize access="isAnonymous()">
<a href="/login.do">로그인</a>
</sec:authorize>
<!-- 로그인 사용자만 이름과 로그아웃 표시 -->
<sec:authorize access="isAuthenticated()">
<sec:authentication var="mbrInfo" property="details.mbrInfo" />
Welcome Back, ${mbrInfo.mbrNm}
<a href="/logout.do">로그아웃</a>
</sec:authorize>
핵심 동작은 다음과 같습니다:
- isAnonymous(): 인증되지 않은 방문자만 보이는 콘텐츠.
- isAuthenticated(): 로그인한 사용자에게만 노출되는 콘텐츠.
- sec:authentication: 현재 인증된 사용자의 상세 정보를 JSP 변수로 바인딩.
2. 정적 리소스 접근 제어 및 security="none"
Spring Security가 전역 필터로 동작하면 CSS, JS, 이미지 등 정적 자원에도 보안 필터가 적용될 수 있습니다. 이런 경우 보안 설정에서 정적 리소스 경로를 예외로 지정해 브라우저가 정상적으로 파일을 로드하도록 설정해야 합니다.
<security:http pattern="/css/**" security="none" />
<security:http pattern="/js/**" security="none" />
<security:http pattern="/images/**" security="none" />
security="none" 설정이 기대대로 동작하지 않을 때 점검할 항목:
- 프로젝트의 Spring Security 버전과 XML 네임스페이스가 충돌하지 않는지 확인합니다.
- 여러 FilterChain이 있는 경우 등록 순서에 따라 필터가 의도치 않게 적용될 수 있으므로 순서를 검토합니다.
- WebMvcConfigurer에서 리소스 핸들러(resource handler)를 등록해 정적 리소스를 명시적으로 매핑했는지 확인합니다.
3. 실무 팁: 로그인 상태 표시 최적화
- 헤더와 내비게이션 바에 로그인/로그아웃 표시를 일관되게 적용하면 사용자 경험이 좋아집니다.
- AOP나 인터셉터로 공통 사용자 정보를 모델에 채워 모든 뷰에서 재사용하면 중복 코드를 줄일 수 있습니다.
- Ajax 요청에도 인증 상태를 확인해 클라이언트 측 UI를 즉시 업데이트하도록 설계하세요.
함께 보면 좋은 엔터프라이즈 사례
🚀 이 주제, 우리 서비스에 어떻게 적용할까요?
Spring Security JSP 권한 처리 및 로그인 상태 표시를 실제 서비스와 조직에 녹여보고 싶다면, 현재 아키텍처와 운영 방식을 한 번 점검해 보는 것부터 시작해 보세요. 팀 위키나 기술 블로그, 사내 스터디 주제로도 아주 좋습니다.
이 글이 도움이 됐다면, 비슷한 엔터프라이즈 사례 글들도 함께 살펴보면서 우리 조직에 맞는 운영 상용구를 정의해 보세요.
댓글
댓글 쓰기