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에 도착