day06 새로운 프로젝트 시작
프로젝트 이름 : web
패키지 : com.codingbox
스프링 웹, 타임리프, 롬복 3가지 추가해서 생성하기
알집 다운받은거 워크스페이스로 옮겨주고 알아서 풀기로함
STS들어가서 메뉴 > file > import > import gradle project 해서 프로젝트 만들기
설정하기
application properties[풀잎그림]에서 그전에 있던걸로 복붙하기 한 후에 저장하고 save as UTF-8
static 에다가 index.html만들고 서버 재기동시켜서 나오는것 확인하면 끝
강사님에게 받은 home.html을 templates에다가 넣고
HomeController만들어서 welcome페이지를 만들어 주면 된다.
item 프로젝트에 있던 css폴더 자체를 똑같은 위치의 web프로젝트에다가 복붙해주기.
-> @Data : 위의 모든 것을 담고있는 어노테이션. 근데 실제 배포 할 때는 이게 너무 커서 권장하지 않는다.
개발단계에서만 귀찮으니까 쓰는 것이다.
id : 자바스크립트에서 validation할 때 주로사용
name : 정보를 넘길 때 사용
타임리프에서 이것도 같이 사용하는것을 대신 해줌
addMemberForm.html에서
th:field="*{loginId}"의 뜻은 ${member.loginId} 를 간단하게 표현한 것이다.
private void expireCookie(HttpServletResponse response, String cookieName) {
Cookie cookie = new Cookie(cookieName, null);
cookie.setMaxAge(0);
response.addCookie(cookie);
}
근데 쿠키로 하는것보다 세션으로 하는것을 권장한다
왜냐하면 쿠키는 사용자에 저장하는 것이고 세션은 서버에 저장하는 것이기 때문에 세션이 좋다
용량이 훨씬 크다
홈 컨트롤러 세션 V2, V3 이상하다.
application properties에서 세션 저장 시간은 간단하게 설정가능한다.
import javax.servlet.Filter; 상속받아야함 다른거 받으면 안돼
package com.codingbox.web.filter;
import javax.servlet.Filter;
public class LogFilter implements Filter {
}
private static final String[] whitelist = {"/", "/members/add", "/login", "/logout", "/css/*"};
-> 인증 필터를 적용해도 홈, 회원가입, 로그인 화면, css같은 리소스에는 접근할 수 있어야 한다. 이렇게 화이트 리스트 경로는
인증과 무관하게 항상 허용한다. 화이트 리스트를 제외한 나머지 모든 경로에는 인증 체크 로직을 적용한다.
isLoginCheckPath(String requestURI)
-> 화이트 리스트를 제외한 모든 경우에 인증 체크 로직을 적용한다.
httpResponse.sendRedirect("/login?redirectURL="+requestURI);
-> 미인증된 사용자는 로그인 화면으로 리다이렉트 한다. 그런데 로그인 이후에 다시 홈으로 이동해 버리면
원하는 경로를 다시 찾아가야하는 불편함이 있다.
예를 들어 상품 관리 화면을 보려고 했다가, 로그인 화면으로 이동하면, 로그인 이후에 다시 상품 관리 화면으로 들어가는 것이 좋다.
return;
-> 필터를 더이상 진행하지 않는다 라는 뜻의 코드. 이후 필터는 물론 서블릿 컨트롤러가 더는 호출되지 않는다. 앞서 리다이렉트를 사용했기 때문에
리다이렉트 응답으로 적용되고 요청이 끝이 난다.
인터셉트는 내일 배울 것이긴한데 더 중요하며, 기술면접에 자주나오는 내용이다.
----day08
로그인 컨트롤러에서 loginV3 만들기
로그인을 하면 상품등록페이지로 바로뙇나오네
뭐지
#애플리케이션 프로퍼티즈
6-2. 스프링 인터셉터 흐름
6-3. 스프링 인터셉터 체인
인터셉터 패키지 만들고 LogInterceptor.java만든다.
LogInterceptor implements HandlerInterceptor
preHandle : 컨트롤러 호출 전에 호출된다. preHandle의 응답값이 true이면 다음으로 진행하고, false이면 더는 진행하지 않는다.
false의 경우 나머지 인터셉터는 물론이고, 핸들러 어댑터도 호출하지 않는다.
postHandle : 컨트롤러 호출 후에 호출된다.
afterHandle : 뷰가 렌더링 된 이후에 호출된다.
이거각각 만들어준 후에
webConfig.java 만들었다.
https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/
이렇게 로그파일을 기록해야 쇼핑몰에서 결제 가 2번되었거나했을때 시스템오류인지 사용자가 2번 요청한 건지 등에 대한 기록을 할수 있고 보통 로거 파일을 따로 빼내놓음. 근데 이게 너무 많고 사용자가 많으면 버벅거리는 일이 생길 수가 있고 로그에 대한 경중을 따져야할 수도 있다.