해당 글은 groomedu의 스프링부트 나만의 블로그 만들기 강의를 보고 개인적으로 정리한 글입니다.
로그인 시 username 값과 password 값을 받아서 DB에 있는지 조회하는데
Repository에서 관련하여 select 해줄 때 사용하는 방식 2가지
Repository
1. JPA Naming 쿼리
//SELECT * FROM user WHERE username = ? AND password = ?
User findByUsernameAndPassword(String username, String password);
2. 네이티브 쿼리
@Query(value="SELECT * FROM user WHERE username = ? AND password = ?", nativeQuery=true)
User login(String username, String password);
Service
@Transactional(readOnly = true) // select 할 때 트랜잭션 시작 , 서비스 종료시에 트랜잭션 종료(정합성 유지)
public User login(User user) {
return userRepository.findByUsernameAndPassword(user.getUsername(),user.getPassword());
}
@Transactional 로 지정한 뒤 readOnly = ture 해줌으로써
select 할 때 트랜잭션 시작하고 서비스 종료시에 트랜잭션을 종료함 → 정합성을 유지함.
Controller
@PostMapping("/api/user/login")
public ResponseDto<Integer> login(@RequestBody User user, HttpSession session){
System.out.println("UserApiController : login 호출됨.");
User principal = userService.login(user); //principal(접근주체)
if(principal != null) {
session.setAttribute("principal", principal); //세션 생성
}
return new ResponseDto<Integer>(HttpStatus.OK.value(),1);
}
HttpSession은 상단에 선언할 수 있음.
@Autowired
private HttpSession session;
session 객체는 스프링에서 bean으로 등록해서 가지고 있어 위와 같이 DI 할 수 있음.
view
<c:choose>
<c:when test="${empty sessionScope.principal}">
<ul class="navbar-nav">
<li class="nav-item"><a class="nav-link" href="/blog/user/loginForm">로그인</a></li>
<li class="nav-item"><a class="nav-link" href="/blog/user/joinForm">회원가입</a></li>
</ul>
</c:when>
<c:otherwise>
<ul class="navbar-nav">
<li class="nav-item"><a class="nav-link" href="/blog/board/writeForm">글쓰기</a></li>
<li class="nav-item"><a class="nav-link" href="/blog/user/userForm">회원정보</a></li>
<li class="nav-item"><a class="nav-link" href="/blog/user/logout">로그아웃</a></li>
</ul>
</c:otherwise>
</c:choose>
header.jsp에서는 세션에 principal 값이 있는지 유무에 따라 메뉴를 구분하여 화면에 출력할 수 있음
1. 세션에 principal 값이 있다.
- 로그인
- 회원가입
2. 세션에 principal 값이 없다.
- 글쓰기
- 회원정보
- 로그아웃
'Spring > SpringBoot' 카테고리의 다른 글
[goormedu 강의] 스프링부트 블로그 만들기 06 - 02 스프링 시큐리티 로그인 페이지 커스터마이징 (0) | 2024.09.25 |
---|---|
[goormedu 강의] 스프링부트 블로그 만들기 06 - 01 스프링 시큐리티 체험해보기 (0) | 2024.09.25 |
[goormedu 강의] 스프링부트 블로그 만들기 05 - 11 스프링 JPA의 OSIV 전략 (0) | 2024.08.30 |
[goormedu 강의] 스프링부트 블로그 만들기 05 - 10 REAPEATABLE READ (0) | 2024.08.28 |
[goormedu 강의] 스프링부트 블로그 만들기 05 - 09 READ COMMIT의 정합성 문제 (0) | 2024.08.28 |