반응형
전자정부프레임워크를 활용하여 로그인 인증 처리를 구현하는 방법을 다룹니다. 로그인은 웹 애플리케이션의 필수 기능으로, 사용자 인증 및 세션 관리를 통해 보안을 강화합니다.
1. 전자정부프레임워크의 로그인 인증 개요
전자정부프레임워크는 로그인 인증을 위한 기본적인 구조를 제공하며, 이를 활용하면 간단히 사용자 인증 기능을 구현할 수 있습니다. 주요 구성 요소는 다음과 같습니다:
- Session: 사용자 인증 상태를 관리.
- Interceptor: 요청을 가로채 인증 상태를 확인.
- Database: 사용자 정보 저장.
2. 프로젝트에 로그인 인증 기능 추가하기
2-1. 테이블 설계
사용자 정보를 저장할 테이블을 설계합니다.
아래는 기본적인 테이블 예제입니다:
CREATE TABLE users (
user_id VARCHAR(50) PRIMARY KEY,
password VARCHAR(255) NOT NULL,
name VARCHAR(100),
role VARCHAR(20) DEFAULT 'USER',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
- user_id: 사용자 아이디.
- password: 비밀번호 (해싱하여 저장).
- role: 사용자 권한.
- created_at: 계정 생성일.
2-2. 로그인 화면 작성
login.jsp는 사용자 인증을 위한 HTML 폼을 제공합니다.
<!DOCTYPE html>
<html>
<head>
<title>로그인</title>
</head>
<body>
<h2>로그인</h2>
<form action="/login" method="post">
<label for="user_id">아이디:</label>
<input type="text" id="user_id" name="user_id" required>
<br>
<label for="password">비밀번호:</label>
<input type="password" id="password" name="password" required>
<br>
<button type="submit">로그인</button>
</form>
</body>
</html>
2-3. 로그인 처리 Controller
로그인 요청을 처리하는 컨트롤러 코드를 작성합니다.
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpSession;
@RestController
public class LoginController {
@Autowired
private UserService userService;
@PostMapping("/login")
public String login(
@RequestParam String user_id,
@RequestParam String password,
HttpSession session) {
User user = userService.authenticate(user_id, password);
if (user != null) {
session.setAttribute("user", user); // 세션에 사용자 정보 저장
return "로그인 성공! " + user.getName() + "님 환영합니다.";
} else {
return "아이디 또는 비밀번호가 잘못되었습니다.";
}
}
@GetMapping("/logout")
public String logout(HttpSession session) {
session.invalidate(); // 세션 무효화
return "로그아웃되었습니다.";
}
}
2-4. Service 및 DAO 구현
UserService를 통해 비즈니스 로직을 처리합니다.
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserService {
@Autowired
private UserDao userDao;
public User authenticate(String userId, String password) {
User user = userDao.findUserById(userId);
if (user != null && user.getPassword().equals(password)) {
return user;
}
return null;
}
}
UserDao는 데이터베이스 접근을 처리합니다.
import org.springframework.stereotype.Repository;
@Repository
public class UserDao {
public User findUserById(String userId) {
// 데이터베이스 쿼리를 통해 사용자 정보를 가져오는 로직 작성
// 예시: JDBC Template 또는 MyBatis 사용
}
}
2-5. 인터셉터로 인증 확인
인터셉터를 사용하여 로그인 상태를 확인하고 인증이 필요한 페이지를 보호합니다.
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Component
public class AuthInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HttpSession session = request.getSession();
Object user = session.getAttribute("user");
if (user == null) {
response.sendRedirect("/login"); // 로그인 페이지로 리다이렉트
return false;
}
return true;
}
}
Interceptor 등록
WebMvcConfigurer를 사용하여 인터셉터를 등록합니다.
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Autowired
private AuthInterceptor authInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(authInterceptor)
.addPathPatterns("/secure/**") // 인증 필요한 경로
.excludePathPatterns("/login", "/logout"); // 예외 경로
}
}
3. 확장 과제
- 비밀번호 해싱 처리
- 비밀번호는 반드시 해싱(SHA-256 또는 bcrypt)을 사용하여 저장.
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; BCryptPasswordEncoder encoder = new BCryptPasswordEncoder(); String hashedPassword = encoder.encode(rawPassword);
- 사용자 권한 처리
- role 값을 사용하여 페이지별 권한을 관리.
- OAuth 연동
- 외부 서비스(예: Google, Kakao)의 로그인 API와 연동.
4. 마무리
오늘 학습한 로그인 인증 처리는 웹 애플리케이션의 핵심 기능입니다. 사용자 인증, 세션 관리, 권한 부여 등 확장 기능을 추가하며 보안을 더욱 강화해보세요.
다음에서는 전자정부프레임워크 기반의 파일 암호화 및 복호화를 다룹니다.
반응형
'개발 > 전자정부프레임워크' 카테고리의 다른 글
전자정부프레임워크에서 배치 스케줄러 구현 (0) | 2024.12.27 |
---|---|
전자정부프레임워크 기반 파일 암호화 및 복호화 (0) | 2024.12.27 |
파일 업로드 및 다운로드 구현 (0) | 2024.12.27 |
전자정부프레임워크와 외부 API 연동하기 (0) | 2024.12.27 |
REST API와 CORS 설정 이해 및 구현 (0) | 2024.12.27 |