[java] Apache Shiro를 사용한 권한 검사 방법

Apache Shiro는 자바로 작성된 오픈소스 보안 프레임워크로, 사용자 인증 및 권한 관리를 더 쉽게 구현할 수 있도록 도와줍니다. 이번 포스팅에서는 Apache Shiro를 사용하여 권한 검사를 어떻게 수행하는지 살펴보겠습니다.

1. Shiro의 의존성 추가하기

먼저, Maven을 사용하는 경우 pom.xml 파일에 아래의 의존성을 추가해야 합니다:

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

2. Shiro 사용자 인증 설정하기

Shiro를 사용하여 사용자 인증을 설정해야 합니다. 이는 보통 shiro.inishiro.ini 파일에 설정을 추가하는 것으로 이루어집니다. 사용자 인증 설정은 사용자의 아이디와 비밀번호를 기반으로 사용자를 인증하는 과정을 정의합니다.

[users]
admin = adminPassword,admin

위의 예제에서 admin은 사용자 아이디이고, adminPassword는 해당 사용자의 비밀번호입니다.

3. 권한 설정하기

Shiro는 사용자의 권한을 설정할 수 있도록 다양한 메커니즘을 제공합니다. 가장 간단한 방법은 shiro.ini 파일을 통해 정적으로 권한을 설정하는 것입니다. 예를 들어, 다음과 같이 설정할 수 있습니다:

[roles]
admin = *

[urls]
/admin/** = authc, roles[admin]

위의 예제에서는 admin 역할이 있는 사용자만 /admin/ 경로의 리소스에 액세스할 수 있도록 설정되었습니다.

4. 권한 검사

Shiro를 사용하여 권한 검사는 매우 간단합니다. 아래의 코드를 참고하세요:

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;

public class AuthorizationExample {
    public static void main(String[] args) {
        // 현재 로그인한 사용자의 인증 및 권한 정보를 얻습니다.
        Subject currentUser = SecurityUtils.getSubject();

        // 현재 사용자가 'admin' 역할을 가지고 있는지 검사합니다.
        if (currentUser.hasRole("admin")) {
            System.out.println("사용자는 admin 역할을 가지고 있습니다.");
        } else {
            System.out.println("사용자는 admin 역할을 가지고 있지 않습니다.");
        }

        // 현재 사용자가 '/admin/' 경로의 리소스에 액세스할 수 있는지 검사합니다.
        if (currentUser.isPermitted("/admin/")) {
            System.out.println("사용자는 '/admin/' 경로의 리소스에 액세스할 수 있습니다.");
        } else {
            System.out.println("사용자는 '/admin/' 경로의 리소스에 액세스할 수 없습니다.");
        }
    }
}

위의 예제에서는 SecurityUtils.getSubject()를 사용하여 현재 사용자의 인증 및 권한 정보를 가져옵니다. 그런 다음, hasRole() 메소드를 사용하여 사용자가 특정 역할을 가지고 있는지 확인하고, isPermitted() 메소드를 사용하여 사용자가 특정 리소스에 액세스할 수 있는지 확인합니다.

결론

Apache Shiro를 사용하여 권한 검사를 수행하는 방법을 살펴보았습니다. Shiro는 간편한 설정 및 다양한 권한 관리 기능을 제공하여 개발자가 보안 요구사항을 쉽게 구현할 수 있도록 도와줍니다.