Spring Security 기본편 (6) 에서 배운 것
- DB 기반 로그인 검증 로직 구현
- UserDetailService와 UserDetails 커스텀:
- Spring Security의 기본 인터페이스인 UserDetailService와 UserDetails를 데이터베이스 스키마에 맞게 커스텀하여 로그인 검증 로직을 구현.
- 데이터베이스에서 사용자 정보와 권한을 조회하여 인증 처리.
- 비밀번호 암호화:
- BCryptPasswordEncoder를 @Bean으로 등록하여 사용자의 비밀번호를 암호화하고, 로그인 시 암호화된 비밀번호를 비교하는 방식으로 검증
- UserDetailService와 UserDetails 커스텀:
- 권한 부여:
- 로그인한 사용자의 권한에 따른 접근 제어:
- 데이터베이스에서 사용자의 권한 정보를 가져와 필요한 페이지와 리소스에 대한 접근 권한을 부여.
- SecurityConfig에서 DB에 저장된 권한 정보를 기반으로 접근 제어 로직을 구성하여 **역할(Role)**에 따라 페이지 접근을 제한.
- 로그인한 사용자의 권한에 따른 접근 제어:
세션 정보 웹 브라우저로 보내기
HomeController.java
package com.jw.SpringSecurityBasic.controller;
import java.util.Collection;
import java.util.Iterator;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HomeController {
@GetMapping("/")
public String Home(Model model) {
// 시큐리티 컨텍스트에서 현재 인증된 사용자 ID(유저네임) 가져오기
String id = SecurityContextHolder.getContext().getAuthentication().getName();
// 뷰에 전달할 사용자 ID를 "id" 속성에 추가
model.addAttribute("id", id);
// 시큐리티 컨텍스트에서 현재 인증된 사용자 권한(roles) 가져오기
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
Collection<? extends GrantedAuthority> authorities = authentication.getAuthorities();
// 인증된 사용자 권한 중 첫 번째 권한 가져오기 (여러 권한이 있을 경우 첫 번째 권한 사용)
Iterator<? extends GrantedAuthority> iter = authorities.iterator();
GrantedAuthority auth = iter.next();
String role = auth.getAuthority();
// 뷰에 전달할 사용자 권한(roles)을 "role" 속성에 추가
model.addAttribute("role", role);
System.out.println("ID: " + id);
System.out.println("Role: " + role);
return "index";
}
}
- 컨트롤러에서 Model 사용:
- Spring MVC의 Model 인터페이스를 사용하여 컨트롤러에서 뷰로 데이터를 전달.
- 사용자의 인증 정보를 SecurityContextHolder에서 가져와 뷰로 전달.
- 세션 정보 추출:
- 사용자 ID:
- SecurityContextHolder.getContext().getAuthentication().getName()을 통해 현재 인증된 사용자의 **ID(유저네임)**를 가져옴.
- 사용자 권한(roles):
- Authentication.getAuthorities()를 사용하여 사용자의 권한을 가져옴.
- 여러 권한이 있을 경우 첫 번째 권한을 선택하여 처리.
- 사용자 ID:
4. index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<span>Spring Security Basic with JSP 연습용</span><br>
<!-- Model 속성에서 가져온 id와 role 출력 -->
<span>사용자 ID: ${id}</span><br>
<span>사용자 권한: ${role}</span>
</body>
</html>
선택한 템플릿엔진의 방식을 활용하여 표시하기 JSP 의 경우 jstl 문법을 사용
전체 과정 요약
- 컨트롤러에서 Model을 통해 세션 정보(사용자 ID 및 권한)를 뷰로 전달하여, JSP 페이지에서 사용자 정보를 표시.
- 사용자 ID는 SecurityContextHolder에서 가져오며, 권한 정보는 GrantedAuthority를 통해 추출.
- JSP 페이지에서 JSTL을 사용하여 모델에 저장된 데이터를 출력하여, 로그인된 사용자 정보와 권한을 브라우저에 표시.
'Spring Security_로그인 기능 구현 > Spring Security Basic' 카테고리의 다른 글
로그인 기능_Spring Security 기본편 (9) (1) | 2024.10.22 |
---|---|
로그인 기능_Spring Security 기본편 (8) (0) | 2024.10.16 |
로그인 기능_Spring Security 기본편 (6) (0) | 2024.10.07 |
로그인 기능_Spring Security 기본편 (5) (0) | 2024.10.01 |
로그인 기능_Spring Security 기본편 (4) (0) | 2024.09.30 |