[java] Apache Shiro를 사용한 사용자 관리 기능 구현하기

Apache Shiro는 자바 애플리케이션의 인증, 권한 부여 및 세션 관리와 같은 보안 기능을 처리하는 데 도움을 주는 강력한 라이브러리입니다. 이번 글에서는 Apache Shiro를 사용하여 기본적인 사용자 관리 기능을 구현하는 방법에 대해 알아보겠습니다.

Shiro 설정

먼저, Apache Shiro를 프로젝트에 추가해야 합니다. Maven을 사용하는 경우 pom.xml 파일에 다음 의존성을 추가합니다:

<dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-core</artifactId>
    <version>1.7.1</version>
</dependency>

Shiro를 설정하기 위해 shiro.ini 파일을 작성합니다. 이 파일은 애플리케이션의 클래스 경로에 위치해야 합니다. 기본적인 설정은 다음과 같습니다:

[main]
# 사용자 데이터베이스를 통해 인증 및 사용자 정보를 관리하는 Realm
authRealm = com.example.MyRealm

# 세션 관리를 위한 캐시 설정
sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager
sessionManager.sessionDAO = org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO
securityManager.sessionManager = $sessionManager
... (기타 설정)

사용자 데이터베이스 연동

Shiro를 사용하여 사용자 정보를 인증 및 관리하려면 사용자 데이터베이스와 연동해야 합니다. MyRealm 클래스를 생성하고 org.apache.shiro.realm.Realm 인터페이스를 구현합니다. 기본적으로 doGetAuthenticationInfo 메서드를 오버라이드하여 사용자의 인증(log-in)을 처리하고, doGetAuthorizationInfo 메서드를 오버라이드하여 권한 부여(authorization)를 처리합니다.

public class MyRealm implements Realm {

    // 사용자 인증 처리
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) {
        // 사용자 인증 처리 로직 구현
    }

    // 권한 부여 처리
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
        // 사용자 권한 부여 로직 구현
    }
}

로그인 처리

Shiro를 사용하여 로그인 처리를 구현하려면 우선 사용자가 제공한 인증 정보를 받아야 합니다. 예를 들어, 웹 애플리케이션의 경우 로그인 화면에서 사용자의 아이디와 비밀번호를 입력받을 수 있습니다. 입력된 정보는 org.apache.shiro.authc.UsernamePasswordToken 객체로 생성됩니다.

// 사용자 인증 정보 생성
AuthenticationToken token = new UsernamePasswordToken(username, password);

// 사용자 로그인 처리
Subject currentUser = SecurityUtils.getSubject();
currentUser.login(token);

권한 부여

Shiro를 사용하여 권한 부여를 처리하려면 @RequiresRoles 또는 @RequiresPermissions 애너테이션을 사용하여 메서드나 클래스에 권한 요구사항을 지정할 수 있습니다. 이를 사용하면 Shiro가 자동으로 사용자의 권한을 확인하여 접근 권한을 부여하거나 예외를 발생시킵니다.

@RequiresRoles("admin")
public void deleteUser(String userId) {
    // 해당 사용자 삭제 로직 구현
}

세션 관리

Shiro를 사용하여 세션 관리를 구현하려면 설정 파일에서 EnterpriseCacheSessionDAO 클래스를 사용하도록 설정해야 합니다. 이 클래스는 세션을 캐시에 저장하고 필요할 때 검색하여 사용할 수 있도록 해줍니다.

결론

이 글에서는 Apache Shiro를 사용하여 사용자 관리 기능을 구현하는 방법에 대해 알아보았습니다. Shiro를 사용하면 보안 처리를 간편하게 처리할 수 있으며, 사용자 인증과 권한 부여, 세션 관리 등을 쉽게 구현할 수 있습니다.

더 많은 정보를 알고 싶다면 Apache Shiro 공식 문서를 참조하십시오.