[java] MyBatis에서 인증과 권한 제어 처리하기
웹 애플리케이션에서 인증과 권한 제어는 매우 중요한 부분입니다. 사용자가 로그인하고, 특정 기능에 접근할 권한이 있는지 확인해야 합니다. MyBatis는 SQL 매퍼를 사용하여 데이터베이스와의 상호 작용을 쉽게 처리할 수 있는 자바 퍼시스턴스 프레임워크입니다. 이 글에서는 MyBatis를 사용하여 인증과 권한 제어를 처리하는 방법에 대해 알아보겠습니다.
1. 데이터베이스 구성
먼저, 인증과 권한 제어를 위해 데이터베이스 테이블을 구성해야 합니다. 예를 들어, users
테이블과 roles
테이블을 생성할 수 있습니다. users
테이블에는 사용자의 아이디, 비밀번호 등의 정보를 저장하고, roles
테이블에는 권한 정보를 저장합니다.
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
password VARCHAR(50) NOT NULL,
role_id INT NOT NULL,
CONSTRAINT fk_role FOREIGN KEY (role_id) REFERENCES roles(id)
);
CREATE TABLE roles (
id INT AUTO_INCREMENT PRIMARY KEY,
role_name VARCHAR(50) NOT NULL
);
2. 인증 처리하기
사용자 인증은 주로 아이디와 비밀번호를 사용하여 처리됩니다. MyBatis를 사용하여 사용자 인증을 처리하려면 다음과 같은 단계를 따를 수 있습니다.
2.1. SQL 매퍼 인터페이스 작성하기
public interface UserMapper {
User getUserByUsername(String username);
}
2.2. SQL 매퍼 XML 작성하기
<select id="getUserByUsername" parameterType="String" resultType="User">
SELECT * FROM users WHERE username = #{username}
</select>
2.3. 사용자 인증 로직 작성하기
public class AuthService {
private UserMapper userMapper;
public boolean authenticate(String username, String password) {
User user = userMapper.getUserByUsername(username);
if (user != null && user.getPassword().equals(password)) {
return true;
}
return false;
}
}
3. 권한 제어 처리하기
인증 후 사용자의 권한을 확인하여 특정 기능에 대한 접근 제어를 해야 합니다. MyBatis를 사용하여 권한 제어를 처리하려면 다음과 같은 단계를 따를 수 있습니다.
3.1. SQL 매퍼 인터페이스 수정하기
public interface UserMapper {
User getUserByUsername(String username);
List<String> getRolesByUserId(int userId);
List<String> getPermissionsByRoleId(int roleId);
}
3.2. SQL 매퍼 XML 수정하기
<select id="getRolesByUserId" parameterType="int" resultType="String">
SELECT r.role_name FROM users u JOIN roles r ON u.role_id = r.id WHERE u.id = #{userId}
</select>
<select id="getPermissionsByRoleId" parameterType="int" resultType="String">
SELECT p.permission_name FROM roles r JOIN permissions p ON r.permission_id = p.id WHERE r.id = #{roleId}
</select>
3.3. 권한 제어 로직 작성하기
public class AuthService {
private UserMapper userMapper;
public boolean hasAccess(String username, String permission) {
User user = userMapper.getUserByUsername(username);
List<String> roles = userMapper.getRolesByUserId(user.getId());
for (String role : roles) {
List<String> permissions = userMapper.getPermissionsByRoleId(role.getId());
if (permissions.contains(permission)) {
return true;
}
}
return false;
}
}
결론
MyBatis를 사용하여 인증과 권한 제어를 처리하는 방법에 대해 살펴보았습니다. 이를 통해 웹 애플리케이션에서 안전하고 제어된 접근을 구현할 수 있습니다. MyBatis의 간편한 SQL 매퍼를 활용하여 데이터베이스와의 연동을 쉽게 처리할 수 있으므로, 개발자들에게 편리함을 제공합니다.
참고 문헌: