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
- jQuery
- CSS
- 코딩
- Spring Security
- 김영한
- spring
- java
- bootstrap
- github
- 스파르타코딩클럽
- myBatis
- ChatGPT
- 기업설명회
- Firebase
- HTML
- AJAX
- restapi
- vscode
- 배포
- 자바
- SQL
- 이클립스
- SQLD
- 티스토리챌린지
- 깃허브
- JavaScript
- 웹개발
- 오블완
- Eclipse
- error
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' 카테고리의 다른 글
0203 ubuntu에 Tomcat10 세팅 후 *.war 배포 (0) | 2025.02.03 |
---|---|
배포 (0) | 2025.02.03 |
1218 비밀번호 암호화 (0) | 2024.12.18 |
1218 인코딩, 디코딩 (0) | 2024.12.18 |
1217 엑셀 파일 다운로드 ajax (0) | 2024.12.17 |