일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- springdatajpa
- spring
- 알고리즘
- 백준
- Proxy
- 인프런
- AOP
- 그리디
- jpa
- 자바
- java
- 스프링
- db
- 스프링 핵심 원리
- Exception
- JPQL
- Servlet
- kotlin
- Thymeleaf
- transaction
- 김영한
- Greedy
- http
- pointcut
- SpringBoot
- JDBC
- QueryDSL
- Spring Boot
- Android
- 스프링 핵심 기능
- Today
- Total
목록인프런 (528)
개발자되기 프로젝트
1. 공통 관심사항. 로그인 한 사용자만 상품 관리 페이지에 들어갈 수 있어야 한다. 하지만 로그인 하지 않은 사용자도 다음 URL을 직접 호출하면 상품 관리 화면에 들어갈 수 있다 ㄷㄷ 어떻게 막지?? 각 컨트롤러에서 로그인 여부를 체크하는 메서드를 추가하면 되긴 한다. 하지만 모든 로직에다가 추가해야 하고, 새로운 로직이 만들어지면 또 적용해야하고 유지보수도 어려워진다. 이렇게 애플리케이션 여러 로직에서 공통으로 관심이 있는 있는 것을 공통 관심사(cross-cutting concern)라고 한다. 여기서는 등록, 수정, 삭제, 조회 등등 여러 로직에서 공통으로 인증에 대해서 관심을 가지고 있다. 스프링의 AOP로도 해결할 수 있지만, 웹과 관련된 공통 관심사는 지금부터 설명할 서블릿 필터 또는 스프..
1. Session 정보를 출력해보자. session에서 time을 가져오면 타입이 long이다. new Date()에 넣어서 날짜 형식으로 바꿈. @Slf4j @RestController public class SessionInfoController { @GetMapping("/session-info") public String sessionInfo(HttpServletRequest request){ HttpSession session = request.getSession(); if(session == null){ return "세션이 없음"; } //세션 데이터 출력 session.getAttributeNames().asIterator() .forEachRemaining(name -> log.info..
1. @SessionAttribute Spring은 세션을 더 편리하게 사용할 수 있도록 @SessionAttribute 을 지원 이미 로그인 된 사용자를 찾을 때는 다음과 같이 하면 됨. 참고로 이 기능은 세션을 생성하지 않는다. -> create : false(required = false) @SessionAttribute(name = "loginMember", required = false) Member loginMember @SessionAttribute 기능 request에서 session을 꺼내고 session에서 name으로 쿠키 조회 해당 쿠키가 없으면 null 반환? 쿠키에서 JSESSIONID 조회 해당 JESSIONID로 member조회 세션을 찾고, 세션에 들어있는 데이터를 찾는 ..
Servlet은 HTTP Session기능 제공. 1. HttpSession 서블릿이 제공하는 HttpSession 도 앞서 만든 SessionManager 와 같은 방식으로 동작 서블릿을 통해 HttpSession 을 생성하면 다음과 같은 쿠키를 생성 쿠키 이름이 JSESSIONID 이고, 값은 추정 불가능한 랜덤 값이다. Cookie: JSESSIONID=5B78E23B513F50164D6FDD8C97B0AD05 HttpSession은 attribute(member정보), 쿠키 이름, 기타 정보(생성 시각, 마지막 요청 시각 등) 를 포함하는 객체. HttpServletRequest에서 httpRequest.getSession()을 통해 받을 수 있음. 2. HttpSession 사용 2.1 Sess..
기존에 사용된 쿠키 방식을 session으로 변경해보자. 1. LoginController loginV2() @PostMapping("/login") public String loginV2(@Validated @ModelAttribute("loginForm") LoginForm form, BindingResult bindingResult, HttpServletResponse response){ if(bindingResult.hasErrors()){ return "login/loginForm"; } Member loginMember = loginService.login(form.getLoginId(), form.getPassword()); if(loginMember == null){ bindingResul..
1. 세션 관리가 제공하는 기능 세션 생성 sessionId 생성 (임의의 추정 불가능한 랜덤 값) 세션 저장소에 sessionId와 보관할 값 저장 sessionId로 응답 쿠키를 생성해서 클라이언트에 전달 세션 조회 클라이언트가 요청한 sessionId 쿠키의 값으로, 세션 저장소에 보관한 값 조회 세션 만료 클라이언트가 요청한 sessionId 쿠키의 값으로, 세션 저장소에 보관한 sessionId와 값 제거 2. SessionManager 생성 cookie 이름은 항상 "mySessionId"임 -> 상수로 만듦 : "SESSION_COOKIE_NAME" session은 메모리에 저장하고, 동시성 문제로 인해 ConcurrentHashMap 사용 package hello.login.web.sess..
1. 쿠키 방식의 문제점 쿠키애 정보를 보관하는 방법은 보안문제가 있다. 보안문제 해결을 위해서는 중요한 정보는 서버에 저장해야함. 클라이언트와 서버는 추정 불가능한 임의의 식별자 값으로 연결해야함. 이렇게 서버에 중요한 정보를 보관하고 연결을 유지하는 방법을 세션이라 함 2. 세션 동작 방식 로그인 사용자가 loginId , password 정보를 전달하면 서버에서 해당 사용자가 맞는지 확인 세션 생성 사용자 정보가 맞으면, 세션 ID를 생성 이 때 세션 ID는 추정 불가능해야 함. UUID는 추정이 불가능하다. -->로또 연속 6번보다 낮은 확률로 맞출 수 있음 ㅋㅋㅋ Cookie: mySessionId=zz0101xx-bab9-4b92-9b32-dadb280f4b61 생성된 세션 ID와 세션에 보관..
1. 보안 문제 쿠키 값은 임의로 변경할 수 있다. 클라이언트가 쿠키를 강제로 변경하면 다른 사용자가 된다 실제 웹브라우저 개발자모드 Application Cookie 변경으로 확인 Cookie: memberId=1 Cookie: memberId=2 (다른 사용자의 이름이 보임) 쿠키에 보관된 정보는 훔쳐갈 수 있다. 만약 쿠키에 개인정보나, 신용카드 정보가 있다면? 이 정보가 웹 브라우저에도 보관되고, 네트워크 요청마다 계속 클라이언트에서 서버로 전달된다. 내 PC가 털릴 수도 있고, 네트워크 전송 구간에서 털릴 수도 있다..... 해커가 쿠키를 한번 훔쳐가면 평생 사용할 수 있다. 해커가 쿠키를 훔쳐가서 그 쿠키로 악의적인 요청을 계속 시도할 수 있다. 2. 대안 쿠키에 중요한 값을 노출하지 않아야 ..