TIL(2023.11.15)

JAKE·2023년 11월 15일

TIL

목록 보기
46/48
post-thumbnail

🏃‍♂️What I learned

1. 암호화

  • bcrypt 암호화 과정

1) 스프링 시큐리티 gradle 필요

implementation group: 'org.springframework.boot', name: 'spring-boot-starter-security', version: '3.1.0'

2) security 클래스 생성

3) BCryptPasswordEncoder를 반환하는 메서드 생성

@Configuration
public class SecurityConfig {
	
    @Bean
	public BCryptPasswordEncoder bCryptPasswordEncoder() {
		
		return new BCryptPasswordEncoder();
        
	}
}

4) 자동 sign in 페이지 이동 막기

메인 메서드의 @SpringBootApplication에 (exclude = SecurityAutoConfiguration.class)추가

반대의 경우 security 클래스에 @EnableWebSecurity 추가


2. Boot에서 Mapper사용하기

1) Mapper 인터페이스 만들기

@Mapper
public interface MemberMapper {

	Member login(Member inputMember);

}

2) mapper.xml 파일 생성 후 namespace 설정
3) 인터페이스의 메서드 명과 mapper의 id값을 매칭

<?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">
<!-- namespace를 Mapper 인터페이스로 지정 -->
<mapper namespace="edu.kh.project.member.model.dao.MemberMapper">
	
	<resultMap type="Member" id="member_rm">
		<id property="memberNo" column="MEMBER_NO" />
		<result property="memberEmail" column="MEMBER_EMAIL" />
		<result property="memberPw" column="MEMBER_PW" />
		<result property="memberNickname" column="MEMBER_NICKNAME" />
		<result property="memberTel" column="MEMBER_TEL" />
		<result property="memberAddress" column="MEMBER_ADDR" />
		<result property="profileImage" column="PROFILE_IMG" />
		<result property="enrollDate" column="ENROLL_DATE" />
		<result property="memberDeleteFlag" column="MEMBER_DEL_FL" />
		<result property="authority" column="AUTHORITY" />
	</resultMap>
	
	<!-- 로그인 -->
	<select id="login" resultMap="member_rm">
		SELECT MEMBER_NO, MEMBER_EMAIL, MEMBER_NICKNAME, MEMBER_PW,
		MEMBER_TEL, MEMBER_ADDR, PROFILE_IMG, AUTHORITY,
		TO_CHAR(ENROLL_DATE, 'YYYY"년" MM"월" DD"일" HH24"시" MI"분" SS"초"') AS
		ENROLL_DATE
		FROM "MEMBER"
		WHERE MEMBER_DEL_FL = 'N'
		AND MEMBER_EMAIL = #{memberEmail}
	</select>

</mapper>

3) DAO에서 만들어 놓은 Mapper 가져와서 사용

@Repository
public class MemberDAO {

	@Autowired
	private MemberMapper memberMapper;
	
	public Member login(Member inputMember) {
		
		return memberMapper.login(inputMember);
	}
	
}

Mapper 인터페이스를 상속받은 자식 객체가 sqlSessionTemplate을 이용하고 있기 때문


3. Cookie

  • thymeleaf(spring boot)에서는 쿠키 접근 불가 -> JS로 처리
function getcookie(key){  

    const cookies = document.cookie;
	// 모든 쿠키 가져옮
  
    const cookieList = cookies.split("; ").map(cookie => cookie.split("="));
    // 배열.map() : 배열의 모든 요소를 순차접근하여 특정 함수 수행 후, 수행 결과를 이용해 새로운 배열 생성
  	
  	// 모든 쿠키를 (;) 기준으로 split 한 후 
  	// 그 각각의 요소(cookie)를
    // (=) 기준으로 split
	// 결과값(cookieList) = [['saveId', 'user01'], ['test', '가나다'], ...] (2차원 배열)
  
    const obj = {};

    for(let i = 0 ; i < cookieList.length ; i ++){

        obj[cookieList[i][0]] = cookieList[i][1];
        // saveId, test(키값)  = 'user01', '가나다'
		// cookieList의 값을 js객체 형태로 생성 
      
    }

    return obj[key];
	// getcookie("키값") : 키값을 입력하면 해당 밸류 반환하는 function 생성 완료
}

if(document.querySelector("input[name='memberEmail']")){

    const saveId = getcookie("saveId");

    if(saveId != undefined){
        document.querySelector("input[name='memberEmail']").value = saveId;
        document.querySelector("input[name='saveId']").checked = true;
    }
}

*참고
@CookieValue 어노테이션 -> 쿠키 데이터를 controller에서 바로 얻어올 수 있음


1개의 댓글

comment-user-thumbnail
2023년 11월 15일

정보에 감사드립니다.

답글 달기