[ Java / Database ] 최종 로그인 시간 기록하기

2024. 3. 19. 19:22· LANGUAGE/└ Java

환경 : Sprint Tool Suite, DBeaver

 

 

[ 최종 로그인 시간 기록 및 갱신 ]

 

 최종 로그인 시간을 기록(변경)하기 위해서는 데이터 베이스를 활용해야한다.

그래서 Dao 파일에 로그인 시각 변경을 위한 메소드를 만들고, sql문을 활용하게 된다. 


   - MemberDao.java 

@Repository
public class MemberDao {
	
	@Autowired
	private JdbcTemplate jdbcTemplate;
	
	@Autowired
	private MemberMapper mapper;
	
	//최종 로그인 시각 변경(수정, Update)
	public boolean updateMemberLogin(String memberId) {
		String sql ="update member "
				+ "set member_login=sysdate "
				+ "where member_id = ?";
		Object[] data = {memberId};
		return jdbcTemplate.update(sql, data) > 0;
	}
	
}

    (+) sql문의 sysdate 기능을 활용하여  시스템 날짜를 찍는다

 

 - memberController.java

@Controller
@RequestMapping("/member")
public class MemberController {
	
	@Autowired
	public MemberDao memberDao;

	
	//실제 로그인
	//- 아이디와 비밀번호 검사를 통과해야만 세션에 데이터를 추가한다
	//- 사용자가 입력한 아이디를 추가한다
	@GetMapping("/login")
	public String login() {
		return "/WEB-INF/views/member/login.jsp";
	}
	@PostMapping("/login")
	public String login(@ModelAttribute MemberDto inputDto,
									HttpSession session) {
		//사용자가 입력한 아이디로 회원정보를 조회한다
		MemberDto findDto = memberDao.selectOne(inputDto.getMemberId());
		//로그인 가능 여부를 판정
		boolean isValid = findDto != null && inputDto.getMemberPw().equals(findDto.getMemberPw());
		//결과에 따라 다른 철
		if(isValid) {
			//세션에 데이터 추가
			session.setAttribute("loginId", findDto.getMemberId());
			
			//최종 로그인 시각 갱신★
			memberDao.updateMemberLogin(findDto.getMemberId());
			
			return "redirect:/";
		} else { //로그인 실패
			return "redirect:login?error";
		}
	}
	
	//실제 로그아웃
	// - 로그인 때 검사 했으므로 추가 검사는 불필요
	// - 로그인 때 저장한 세션의 데이터만 삭제 처리
	@RequestMapping("/logout")
	public String logout(HttpSession session) {
		session.removeAttribute("loginId");
		return "redirect:/";
	}


}

 

    (+) 최종 로그인 시각 갱신★
          memberDao.updateMemberLogin(findDto.getMemberId()); 이 코드가 갱신을 해주는 코드이다.

    (+) 다른 코드에 대한 참고 : https://ggingggang05.tistory.com/123

 

 

   - 출력결과

로그인 일시 칸에 최종 로그인 시간이 기록되어있음을 확인할 수 있다.

 

 

 

 

개인 공부 기록용입니다:)

728x90