Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- HTML
- 오류
- SQL
- chart.js
- myBatis
- firestore
- jQuery
- error
- 티스토리챌린지
- CSS
- vscode
- bootstrap
- 오블완
- 스파르타코딩클럽
- 자바
- java
- icon
- 이클립스
- 코딩
- Firebase
- SQLD
- restapi
- 웹개발
- 깃허브
- github
- 기업설명회
- JavaScript
- Eclipse
- spring
- AJAX
Archives
- Today
- Total
푸들푸들
1220 비밀번호 변경 본문
resultType
* insert, update, delete -> vo
* select -> Map
비밀번호 변경
변경 전 pw가 일치하면 변경 진행
@Mapper
public interface MemberMapper {
int insertPrepw(Member member);
int updateMemberPw(Map<String, Object> paramMap);
}
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.app.mapper.MemberMapper">
<!-- 1) pw 수정 -->
<update id="updateMemberPw" parameterType="map">
UPDATE member
SET pw =#{newPw}
WHERE id = #{member.id} AND pw = #{member.pw}
</update>
<!-- 2) 1)의 반환값이 1이면 이전 pw를 prepw테이블에 백업 -->
<insert id="insertPrepw" parameterType="com.example.app.vo.Member">
INSERT INTO prepw(
id, pw
) VALUES (
#{id}, #{pw}
)
</insert>
</mapper>
@Service
@Transactional
public class MemberService {
public void modifyMemberPw(Member member, String newPw) {
// member.getPw() -> 인코딩
member.setPw(SHA256Util.encoding(member.getPw()));
// newPw -> 인코딩
newPw = SHA256Util.encoding(newPw);
// 수정
Map<String,Object> paramMap = new HashMap<>();
paramMap.put("member",member);
paramMap.put("newPw",newPw);
int updateRow = memberMapper.updateMemberPw(paramMap);
// 수정에 성공하면 이전 pw 백업
if(updateRow == 1) {
int insertRow = memberMapper.insertMember(member);
if(insertRow == 0) {
throw new RuntimeException("prepw테이블에 입력 실패");
}
}
}
}
--> 이전 pw가 계속 쌓임 -> 매달 1일 0시에 prepw에 한 id당 5개이하 행만 남기고 삭제 (scheduler)
비밀번호 분실
시스템이 새로운 pw로 변경 후 고객 메일로 발송
@Mapper
public interface MemberMapper {
int updateMemberPwBySys(Member member);
}
<!-- System이 pw 강제 수정 -->
<update id="updateMemberPwBySys" parameterType="com.example.app.vo.Member">
UPDATE member
SET pw =#{Pw}
WHERE id = #{id} AND mail = #{mail}
</update>
@Service
@Transactional
public class MemberService {
@Autowired MemberMapper memberMapper;
@Autowired JavaMailSender javaMailSender;
public void sendMailNewPw(Member member) {
// 시스템이 새로운 pw로 변경 후 메일로 발송
String changePw = UUID.randomUUID().toString().replace("-", "").substring(0,4);
member.setPw(SHA256Util.encoding(changePw));
int row = memberMapper.updateMemberPwBySys(member);
if(row == 1) { // 변경된 pw를 메일로 전송
SimpleMailMessage mailMsg = new SimpleMailMessage();
mailMsg.setFrom("관리자 메일 주소");
mailMsg.setTo(member.getMail());
mailMsg.setSubject("변경된 pw입니다");
mailMsg.setText("변경된 pw: "+changePw);
javaMailSender.send(mailMsg);
}
}
}
'구디아카데미 > JAVA' 카테고리의 다른 글
1218 비밀번호 암호화 (0) | 2024.12.18 |
---|---|
1218 인코딩, 디코딩 (0) | 2024.12.18 |
1217 엑셀 파일 다운로드 ajax (0) | 2024.12.17 |
1217 사인 이미지 전송 ajax (0) | 2024.12.17 |
[클라우드] AWS Lightsail Ubuntu 20.04 JDK 설치 (0) | 2024.12.16 |