중앙정보기술인재개발원/Spring

[Spring] final project_2차

soidev 2025. 5. 12. 17:54

2차

카테고리(다중 취미),검색,페이징,파일업로드,암호화, 인터셉터,메일인증, 인터셉터, 자바스크립트 기초

 

단일값이 아니라 여러값을 넣을때

제1정규화원칙때문에

 

 

checkbox는 똑같은 이름으로 설정

링크구조로... http의 프로토콜의 정상적인 케이스

파라미터 받을때 Requestparam으로 받고 List로 받으면됨

insert되자마자 primary키가 필요한 경우 : 그때는 쿼리가 두번 실행해야함 mybatis에서 selectKey라는걸 사용함

 

파라미터값이 안 넘아왔을시에 에러가 이런 오류!

 

 

글쓰기할때 파일도 올리기

<form action="/board/writeArticleProcess" method="post" enctype="multipart/form-data">
닉네임 : <span th:text="${session.sessionUserInfo.nickname}"></span>
<br>
제목 : <input name="title" type="text"><br>
내용 : <br>
<textarea name="content"></textarea> <br>
<!-- 엔터칠수 있는 입력 input 양식 -->
이미지 : <input name="uploadFiles" type="file" multiple accept="image/*"> <br>
<!-- multiple : 이미지 여러개 넣을수있음 accept : image파일만 선택할수만 있음-->
<input type="submit" value="글 저장">
</form>

 

@RequestMapping("writeArticleProcess")
public String writeArticleProcess(HttpSession session,
@ModelAttribute ArticleDto params,
@RequestParam("uploadFiles") List<MultipartFile> uploadFiles){
//객체를 받을땐 requestparam이 아니라 modelAttribute로 해야함
 
try {
   for(MultipartFile multipartFile : uploadFiles){
   String filename = multipartFile.getOriginalFilename();
   multipartFile.transferTo(new File("/Users/soi/uploadFiles/"+filename));
 }
 } catch (Exception e) {
    e.printStackTrace();
}

//userid값이 0임 , session을 가져와야함
UserDto sessionUserDto = (UserDto)session.getAttribute("sessionUserInfo");

params.setUserId(sessionUserDto.getId());

boardService.writeArticle(params);

return "redirect:/board/mainPage"; //글을 다쓰면 메인페이지로 넘어갈것!
}

 

uploadFile

uploadFiles: 서버가 갖고있는 폴더, 클라이언트에선 없는폴더

aaa.jpg는 클라이언트에만 갖고있는 파일

 

컨트롤러의 역할 : 요청을 담당하는 역할

web과 관련된 코든느 컨트롤러

관련없는건 서비스 

서비스는 웹하고 완전히 독립적이여야함

서비스는 웹이 아니여도 호출이 되야함

 

 


이메일 인증

먼저 2단계 인증까지 한다음에 여기 들어가서

https://myaccount.google.com/security 

 

Google 계정

 

myaccount.google.com

앱 비밀번호 만들기

 

 

 

buil.gradle - 외부 라이브러리 추가

implementation 'org.springframework.boot:spring-boot-starter-mail'

 

application.properties

#메일 세팅
spring.mail.host = smtp.gmail.com
spring.mail.port = 587
spring.mail.username = ~~~@gmail.com
spring.mail.password=앱비번
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.properties.mail.smtp.auth=true
  • gmail 쓸 것인걸 선언
  • 구글에서는 587번 포트 제공
  • 내 이메일 주소 추가
  • 앱비번 넣기 아래서부터는 메일 마다 다 다를듯?
  • 암호화하겠다는거
  • 중간자머시기 암호화기법을 추가하겠다는거?

UserServiceImpl.java

일단 먼저 메일 보내보기!

@Autowired
private JavaMailSender javaMailSender;
  • javamailsender 추가 : 얘를 이용해서 메일 보낼수있음(인터페이스임)
//메일 보내기
try{
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage,"utf-8");
 
mimeMessageHelper.setSubject("제목 .. 입니다");
mimeMessageHelper.setText("내용 입니다. 야호!!",true); //true를 넣으면 html코드로 날라감
mimeMessageHelper.setTo(userDto.getEmail());
mimeMessageHelper.setFrom("aaa@aaa.com","FP 관리자"); //한글이 안들어감 첫번쨰,

javaMailSender.send(mimeMessage);
 
}catch(Exception e){
e.printStackTrace();
}
  • javaMailSender : 실제론 얘가 메일을 보낸 것
  • MimeMessage : 메시지 구성요소들(약간 컨테이너? 라고 생각하면될듯)
  • 근데 mimemessage얘 혼자보내기 껄끄러우서 helper 등장
  • try..catch문 쓰는 이유 ? 

처음에 회원가입할땐 오류가 뜸

이유 : naver.com로 해야하는데 naver,com으로 해서.. 잘 확인하고 치쟈! 나중엔 console창 띄우게 할것 

성공

 

 

 

MailAuthDto.java 추가

package com.ca.finalproject.dto;

import java.time.LocalDateTime;

import lombok.Data;

@Data
public class MailAuthDto {
private int id;
private int userId;
private String authKey;
private String isCompleted;
private LocalDateTime completedTime;
private LocalDateTime createdAt;
}

 

UserSqlMapper.java

//메일 인증
public void createMailAuth(@Param("userId") int userId, @Param("authKey") String authKey);
public void updateMailAuth(String authKey);

 

 

우리가 컨트롤러에서 정보를 통하게하는데 Filter->intercetor->Controlled에 도착