ㅁ 회원가입을 암호화해서 지금 로그인이 안되는 상태다.
- 지금 쿼리는 아이디와 비번으로 찾고 있는데, 실제 db에 저장된 비번은 암호문이기 때문에 평문값으로 조회할 수가 없다.
- 평문을 암호화해서 조회할 수도 없다. SHA 방식은 가능. 그러나 BCrypt 방식은 똑같은 평문을 암호화할 때마다 ㅁ배번 다른 암호문 나오기 때문에 그렇게는 불가능하다.
- 우선은 아이디 가지고 조회를 한다.
그리고 b~에서 제공하는 특정 메소드를 사용해서 평문값과 암호문값이 일치하는지 비교해볼 수 있다.
ㅁ member-mapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="memberMapper">
<resultMap id="memberResultMap" type="MemberDto">
<result column="user_no" property="userNo" />
<result column="user_id" property="userId" />
<result column="user_pwd" property="userPwd" />
<result column="user_name" property="userName" />
<result column="email" property="email" />
<result column="gender" property="gender" />
<result column="phone" property="phone" />
<result column="address" property="address" />
<result column="profile_url" property="profileURL" />
<result column="signup_date" property="signupDt" />
<result column="modify_date" property="modifyDt" />
<result column="status" property="status" />
</resultMap>
<!-- 로그인(암호화 적용 전)
<select id="selectMember" resultMap="memberResultMap">
select
user_no
, user_id
, user_pwd
, user_name
, email
, gender
, phone
, address
, profile_url
, signup_date
, modify_date
, status
from member
where status in ('Y', 'A')
and user_id = #{userId}
and user_pwd = #{userPwd}
</select> -->
<select id="selectMember" resultMap="memberResultMap">
select
user_no
, user_id
, user_pwd
, user_name
, email
, gender
, phone
, address
, profile_url
, signup_date
, modify_date
, status
from member
where status in ('Y', 'A')
and user_id = #{userId}
</select>
<!-- 회원가입 -->
<insert id="insertMember">
insert
into member
(
user_no
, user_id
, user_pwd
, user_name
, email
, gender
, phone
, address
)
values
(
seq_uno.nextval
, #{userId}
, #{userPwd}
, #{userName}
, #{email}
, #{gender}
, #{phone}
, #{address}
)
</insert>
<!-- 아이디중복체크(아이디 수 조회) -->
<select id="selectUserIdCount" resultType="_int">
select
count(*)
from member
where user_id = #{checkId}
</select>
<!-- 한 개의 컬럼, 한 개의 숫자만 조회된다. 자바에서의 int로 반환되게끔 한다. -->
<!-- 회원정보수정 -->
<update id="updateMember">
update
member
set user_name = #{userName}
, email = #{email}
, phone = #{phone}
, address = #{address}
, gender = #{gender}
, modify_date = sysdate
where user_id = #{userId}
</update>
<!-- 회원탈퇴 (행을 삭제하진 않고 개인정보만 일부 지운다. 이름 첫글자만 남기고 마스킹처리. -->
<update id="deleteMember">
update
member
set email = null
, gender = null
, phone = null
, address = null
, profile_url = null
<!-- , user_name = rpad( substr(user_name, 1, 1), 최종반환글자수, 덧붙일문자열 ) -->
, user_name = rpad( substr(user_name, 1, 1), length(user_name), '*' )
, status = 'N'
, modify_date = sysdate
where user_id = #{userId}
</update>
</mapper>
- 마지막줄을 삭제했다.
- 암호화 전에는 아이디와 비번을 가지고 일치하는 회원을 조회하지만,
암호화 후에는 아이디만을 가지고 일치하는 회원을 조회한다.
- 존재하는 아이디만 잘 입력했다면 우선 조회는 된다.
조회할 때 비밀번호 컬럼(암호화된 비번)도 조회해서 멤버 객체에 담았다.
- 그러고나서 컨트롤러단에서 평문 비밀번호와 암호문 비밀번호를 비교할 수 있다.
우선 조회해가고, 자바단에서 비번 체크를 한다.
ㅁ MemberController
- 현재 컨트롤러의 로그인 성공 조건은 ~다. 조건을 하나 추가한다.
- matches 메소드 작성.
- 단순히 equals 비교가 아니다. bcrypt 객체 내에서 평문하고 암호문을 가지고 일치하는지 비교해준다.
true 혹은 false가 반환된다.
- 이러면 이제 로그인이 될것이다. 서버키고 로그인하면 로그인이 잘 된다.
'Spring' 카테고리의 다른 글
[웹프로젝트] 9. 마이페이지(2) 수정 요청 (0) | 2024.10.29 |
---|---|
[웹프로젝트] 8. 마이페이지(1) 조회 (1) | 2024.10.29 |
[웹프로젝트] 6. 회원가입(2) - 암호화 (0) | 2024.10.28 |
[웹프로젝트] 5. 회원가입 (1) | 2024.10.28 |
[웹프로젝트] 4. 로그인, 로그아웃, 회원가입 (0) | 2024.10.28 |