간편한 권한 인증을 위한 경량 프레임워크 sa-token 소개

현대 웹 애플리케이션에서는 전통적인 인증 프레임워크인 Apache ShiroSpring Security 외에도 더 간결하고 유연한 대안이 필요하다. 특히 모바일, API 중심의 분리 아키텍처가 보편화되면서, 기존 프레임워크의 복잡한 설정과 제약은 개발자의 부담으로 작용한다.

sa-token은 이러한 문제를 해결하기 위해 설계된 경량 자동 인증 프레임워크다. 로그인 검증, 권한 관리, 세션 처리, 단일 로그인, OAuth2 연동 등 다양한 인증 요구사항을 한 줄의 코드로 쉽게 구현할 수 있도록 지원한다.

핵심 기능 요약

  • 로그인 상태 확인: 간단한 메서드 호출로 현재 사용자가 인증되었는지 판단
  • 권한 기반 접근 제어: @SaCheckPermission 어노테이션으로 라우팅 단위에서 권한 검사 가능
  • 세션 관리: Redis, Memcached 등 외부 저장소와 연동하여 데이터 지속성 보장
  • 디바이스별 로그인 제어: PC, 모바일 등 각기 다른 기기에서 동시 접속 제어
  • 즉시 로그아웃 (킥): 특정 사용자 세션을 강제로 종료
  • 임시 계정 전환: 현재 세션의 계정을 일시적으로 다른 사용자로 변경
  • 무 Cookie 환경 지원: JWT 기반 토큰 제공, 모바일 앱 및 웹앱에 최적화
  • 자동 갱신 기능: 만료 시간 기반 자동 재발급 또는 수동 조정 가능
  • 다중 인증 체계: 일반 사용자, 관리자 등 여러 계정 테이블 분리 인증 가능
  • 주입 기반 통합: 스프링 등 프레임워크와 무설정 연동 가능

사용 예시

사용자 로그인 시, 단 하나의 메서드 호출만으로 세션 정보를 설정할 수 있다:

// 사용자 ID 10001로 로그인 상태 설정
StpUtil.setLoginId(10001);

// 인증 여부 확인 (미로그인 시 예외 발생)
StpUtil.checkLogin();

특정 권한이 있는 사용자만 접근 가능한 엔드포인트 정의:

@SaCheckPermission("user:create")
@RequestMapping("/api/user/create")
public String createUser(UserDto user) {
    // 작업 수행
    return "사용자 생성 완료";
}

특정 사용자를 강제 로그아웃시키는 경우:

// 계정 ID 10001의 세션을 강제 종료
StpUtil.logoutByLoginId(10001);

또한 다음과 같은 다양한 작업도 단일 메서드로 처리 가능:

  • StpUtil.getLoginId() – 현재 세션의 사용자 식별자 조회
  • StpUtil.isLogin() – 현재 세션이 로그인 상태인지 확인
  • StpUtil.getSession() – 현재 사용자의 세션 객체 가져오기
  • StpUtil.setLoginId(10001, "mobile") – 특정 디바이스에서 로그인
  • StpUtil.switchTo(20005) – 현재 세션을 다른 사용자로 일시 전환
  • StpUtil.hasRole("admin") – 역할 소유 여부 확인

이처럼 sa-token은 복잡한 필터, 컨피그 파일, 커스텀 리얼름 없이도 대부분의 인증 요구사항을 충족한다. 기존 프레임워크의 번거로운 설정 과정을 걷어내고, 개발자는 비즈니스 로직에 집중할 수 있다.

공식 문서 및 소스코드는 아래 링크에서 확인할 수 있다:

태그: sa-token java 인증 프레임워크 jwt 세션 관리

8월 15일 12:57에 게시됨