프로젝트

파이널 프로젝트_로그인, 로그아웃(Spring Boot, Session )

유서담 2024. 4. 20. 13:37

 


 

 

Admin Controller

 

 

GET 방식 호출 : 로그인 페이지로 이동

 

POST 방식 호출 : 

사용자가 입력한 아이디와 비밀번호를 String 타입으로 받고

사용자 세션을 관리하기 위해서 HttpSession 객체를 받는다

 

Admin admin = adminService.login(id, password)

입력받은 아이디와 비밀번호를 Service의 login 메소드로 전달한다

로그인을 성공하면 Admin 객체를 반환, 실패할 경우 null을 반환

 

 if(admin != null){
            session.setAttribute("admin", admin);
        }  else {
            return "redirect:/admin/login?error";
        }
        return "redirect:/admin/home";
}

 

이 조건문은 로그인이 성공했는지 확인한다

성공했을 경우 HttpSession 객체의 setAttribute 메소드를 사용하여

세션에 "admin"이라는 이름으로 Admin 객체를 저장한다

 

이를 통해서 로그인한 사용자의 정보를 다른 페이지에서도 사용자의 로그인 상태를 유지할 수 있다

 

로그인 처리 결과에 따라서 리다이렉트 처리를 하는데

성공시에는 /admin/home 경로로 리다이렉트해서 관리자 홈페이지로 이동

실패시에는 로그인 페이지로 리다이렉트 하면서 쿼리 파라미터에 error를 추가한다

 

 

error가 반환되었을 경우에는 위와 같은 메세지가 출력이 된다

 


 

 

Admin Service - login메소드

 

 

login 메소드는 매개변수로 사용자가 화면에 입력한

아이디 값과 비밀번호 값을 String 타입으로 받는다

 

Admin findId = adminMapper.getAdminId(id)

데이터 베이스에서 id에 해당하는 값을 찾고

findId 변수에 저장한다

 

String findPw = (findId == null) ? "" : findId.getPassword()
finId 변수가 null일 경우(입력한 아이디가 데이터 베이스에 존재하지 않을때)

빈 문자열을 findPw 변수에 저장한다

null이 아닐 경우엔 데이터 베이스에 입력되어 있는 비밀번호 값을 저장한다

 

// DB에 id가 존재하지 않거나 저장된 비밀번호가 일치하지 않는 경우를 체크
if((findId == null) || passwordEncoder.matches(password, findPw) == false) {// 입력된 비밀번호와 저장된 비밀번호를 비교하는 메소드
	return null;
}

return findId;

 

 

if((findId == null) || passwordEncoder.matches(password, findPw) == false)

이 조건문은 두 가지를 확인

 

데이터베이스에서 아이디를 기반으로 관리자 정보를 찾지 못했는지(findId == null)

입력된 비밀번호와 데이터베이스에 저장된 비밀번호가 일치하지 않는지

(passwordEncoder.matches(password, findPw) == false)

 

passwordEncoder.matches(password, findPw) 메소드는 입력된 비밀번호와

저장된 비밀번호를 비교하는 방식

 

return findId

만약 아아디가 존재하지 않거나 비밀번호가 일치하지 않는 경우에는

null 값을 반환한다.

일치할 경우에는 Admin 객체를 반환한다

 

 

matches(a, b) 메소드 설명

a : 사용자가 입력한 비밀번호

b : 데이터베이스에 저장되어 있는 해시된 비밀번호

 

matches 메소드는 a 매개변수를 내부적으로 해시 처리한 후,

b 매개변수와 비교한다

비교해서 값이 일치하면 true를 반환, 그렇지 않으면 null을 반환

 

 


 

 

매퍼파일들 - Mapper 인터페이스 ,  xml

 

 

 

 

getAdminId(String id)

 <select id="getAdminId" resultMap="AdminResultMap" parameterType="String">
        SELECT
            ADMIN_ID, ADMIN_PW, ADMIN_EMAIL, ADMIN_TEL
        FROM
            ADMIN
        WHERE
            ADMIN_ID = #{value}
    </select>

 

아이디를 입력해서 해당하는 아이디의

아이디, 비밀번호, 이메일, 전화번호를 불러온다

 

 

 


 

로그아웃

 

 

 

session.invalidate( )

invalidate( ) 메소드는 세션에 저장된 모든 객체를 제거하고 무효화하는 역할을 수행

세션을 파기하고 로그인 페이지로 이동시킨다