HandlerInterceptor 상속 후 오버라이딩해서 사용
(override/implement methods) - 강제화는 아님
서버를 처음 실행할 때 homeController에서 필요한 값을 application scope에 세팅할 경우, 메인 페이지를 열지 않으면 세팅이 되지않음(ex. 링크를 타고 들어오는 경우)
반면, interceptor를 사용하면 어떠한 경우에도 필요한 값을 application scope에 세팅할 수 있음
public class BoardTypeInterceptor implements HandlerInterceptor {
@Autowired
private BoardService service;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
// application scope 내장 객체 얻어오기
ServletContext application = request.getServletContext();
// application scope에 BOARD_TYPE이 조회되어 세팅되지 않았다면
// == 서버 시작 후 누구도 요청을 한 적이 없을 경우
if(application.getAttribute("boardTypeList") == null) {
// 조회 서비스 호출
List< Map<String, Object>> boardTypeList = service.selectBoardTypeList();
// application scope에 세팅
application.setAttribute("boardTypeList", boardTypeList);
}
return HandlerInterceptor.super.preHandle(request, response, handler);
}
/** controller -> dispatcher servlet 사이
*
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
}
/** view resolver -> dispatcher servlet 사이
*
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
}
이메일 인증
이용 방법(Google 예시)
1) 구글 계정 관리 -> 보안 -> 2단계 인증 -> 앱 비밀번호 -> 비밀번호 생성!
2) 세팅
2-1) pom.xml 세팅
<!-- 이메일 인증 --> <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.7</version> </dependency> <!-- 캐시, 메일, 스케줄링, UI와 관련된 부가적 기능들이 포함되어있는 라이브러리 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${org.springframework-version}</version> </dependency>
2-2) email-context.xml에 bean 생성 -> web.xml에도 경로 추가
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"> <property name="host" value="smtp.gmail.com" /> <property name="port" value="587" /> <property name="username" value="메일 주소"/> <property name="password" value="앱 비밀번호" /> <property name="javaMailProperties"> <props> <prop key="mail.transport.protocol">smtp</prop> <prop key="mail.smtp.auth">true</prop> <prop key="mail.smtp.starttls.enable">true</prop> <!-- <prop key="mail.debug">true</prop> --> <prop key="mail.smtp.ssl.trust">smtp.gmail.com</prop> <prop key="mail.smtp.ssl.protocols">TLSv1.2</prop> </props> </property> </bean>
3) 이메일에 대한 밸류값을 ajax로 전달 받아(@ResponseBody)
3-1) 난수(인증번호) 생성
3-2) 메일 보내기 객체 생성(MimeMessage mail = mailSender.createMimeMessage();
3-3) 필요 내용 세팅
송신자 지정(mail.setFrom),
수신자 지정(mail.addRecipient),
제목 세팅(mail.setSubject),
내용 세팅(mail.setText)
3-4) 메일 전송(mailSender.send(mail))
4) 해당 인증번호 DB 저장
5) 사용자가 인증번호 입력한 값을 ajax로 전달 받아(@ResponseBody) DB에 저장된 값과 같은지 확인
-> 0,1값 반환
6) 1이면 인증완료, 0이면 인증실패