[java] Apache Shiro 로그인 기능 구현하기

Apache Shiro는 Java 언어로 개발된 오픈 소스 보안 프레임워크이며, 로그인 및 인증 기능을 구현하기에 매우 유용합니다. 이번 블로그 포스트에서는 Apache Shiro를 사용하여 간단한 로그인 기능을 구현하는 방법에 대해 알아보겠습니다.

필요한 의존성 추가하기

로그인 기능을 구현하기 위해 먼저 Apache Shiro의 의존성을 프로젝트에 추가해야 합니다. 프로젝트의 pom.xml 파일에 다음 의존성을 추가합니다.

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

Shiro 설정하기

Apache Shiro를 사용하기 위해 Shiro의 설정 파일을 작성해야 합니다. shiro.ini라는 파일을 생성하고 다음과 같이 설정합니다.

[main]
authc.loginUrl = /login
authc.successUrl = /home
authc.usernameParam = username
authc.passwordParam = password

[users]
user1 = password1, role1
user2 = password2, role2

위 설정 파일에서는 로그인 URL 및 인증 성공 후 이동할 URL, 사용자 이름 및 비밀번호의 파라미터 이름을 설정하고 있습니다. 또한 사용자 정보와 사용자의 역할 정보를 설정하고 있습니다.

로그인 페이지 생성하기

로그인 기능을 위한 로그인 페이지를 생성해야 합니다. login.jsp라는 파일을 생성하고 다음과 같은 내용을 작성합니다.

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Login</title>
</head>
<body>
    <form method="post" action="/login">
        <div>
            <label for="username">Username:</label>
            <input type="text" id="username" name="username">
        </div>
        <div>
            <label for="password">Password:</label>
            <input type="password" id="password" name="password">
        </div>
        <input type="submit" value="Login">
    </form>
</body>
</html>

위 코드는 간단한 HTML 로그인 폼을 생성하는 코드입니다. 사용자 이름과 비밀번호를 입력하고 로그인 버튼을 클릭하면 /login URL로 POST 요청이 전송됩니다.

컨트롤러 작성하기

로그인 폼에서 전송된 요청을 처리하기 위해 컨트롤러를 작성해야 합니다. 메인 컨트롤러 파일에 다음과 같은 메서드를 추가합니다.

@RequestMapping(value = "/login", method = RequestMethod.POST)
public String login(@RequestParam("username") String username, @RequestParam("password") String password) {
    Subject currentUser = SecurityUtils.getSubject();

    if (!currentUser.isAuthenticated()) {
        UsernamePasswordToken token = new UsernamePasswordToken(username, password);
        
        try {
            currentUser.login(token);
        } catch (AuthenticationException e) {
            // 인증 실패 처리
            return "redirect:/login?error=true";
        }
    }

    return "redirect:/home";
}

위 코드에서는 전달받은 사용자 이름 및 비밀번호를 사용하여 인증을 시도하고, 인증에 성공하면 /home으로 리다이렉트합니다. 인증에 실패하면 /login?error=true로 리다이렉트하여 실패 메시지를 표시합니다.

홈 페이지 작성하기

로그인에 성공한 사용자를 위한 홈 페이지를 작성해야 합니다. home.jsp라는 파일을 생성하고 다음과 같은 내용을 작성합니다.

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Home</title>
</head>
<body>
    <h1>Welcome!</h1>
    <p>You are logged in.</p>
</body>
</html>

위 코드는 간단한 홈 페이지를 생성하는 코드입니다. 로그인에 성공했을 경우 홈 페이지에 “Welcome! You are logged in.” 메시지가 표시됩니다.

실행해보기

이제 프로젝트를 실행하고 브라우저에서 http://localhost:8080/login에 접속하여 로그인 기능을 테스트할 수 있습니다. 유효한 사용자 이름과 비밀번호를 입력하여 로그인에 성공하면 홈 페이지가 표시됩니다. 인증에 실패하면 실패 메시지가 표시됩니다.

Apache Shiro를 사용하여 간단한 로그인 기능을 구현하는 방법에 대해 알아보았습니다. Apache Shiro는 로그인 및 인증 기능뿐만 아니라 더욱 다양한 보안 기능을 제공하므로, 필요에 따라 추가적인 기능을 구현할 수 있습니다.

참고 자료