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 추가
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을 이용하고 있기 때문
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에서 바로 얻어올 수 있음
정보에 감사드립니다.