일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 스프링 핵심 원리
- AOP
- http
- Exception
- 인프런
- transaction
- Proxy
- 자바
- QueryDSL
- 알고리즘
- 스프링
- SpringBoot
- springdatajpa
- Thymeleaf
- Servlet
- kotlin
- java
- JDBC
- jpa
- Greedy
- Spring Boot
- 김영한
- db
- pointcut
- 그리디
- JPQL
- 스프링 핵심 기능
- spring
- 백준
- Android
- Today
- Total
목록로그인 (10)
개발자되기 프로젝트
로그인 시 검증 처리를 위해 의존성 추가. implementation 'org.springframework.boot:spring-boot-starter-validation' 로그인을 벌써 구현하는 이유? 세션에서 로그인 회원 정보를 가져와서, 글 작성시 작성자로 활용하기 위함 1. 로그인 방식 쿠키 세션 2. loginForm 로그인 시 입력할 정보이다. @Getter @AllArgsConstructor public class LoginForm { private String loginId; private String password; } 3. loginService 로그인 처리 로직은 간단하다 비밀번호가 DB에 입력된 값과 동일하면 Member정보를 반환한다. 이 때 DTO로 변환하여 return. @S..
RequestMapping Handler Adapter 구조 HTTP 메시지 컨버터는 SpringMVC 어디 쯤? 에서 사용됨....? 1. SpringMVC 구조 @RequestMapping을 처리하는 핸들러 Adapter인 RequestMappingHandlerAdapter에서 처리함. 2. RequestMappingHandlerAdapter 동작.. bsh-developer.tistory.com 1. @Login annotation을 직접 만들자? 기존에는 @SessionAttribute()를 Member에 붙여서 Member와 관련있는 Session을 편하게 사용하였다. @SessionAttribute()는 request에서 session을 꺼내주고 쿠키까지 찾아준다. 충분히 편리하다. // @G..
스프링 인터셉터는 서블릿 필터와 같이 웹과 관련된 공통 관심 사항을 효과적으로 해결할 수 있는 기술 해당 기능을 Servlet이 제공하면 ServletFilter, Spring MVC가 제공하는 것은 Spring Iterceptor 웹과 관련된 공통 관심 사항을 처리하지만, 적용되는 순서와 범위, 그리고 사용방법이 다름. 1. Spring Interceptor 흐름 HTTP 요청 -> WAS -> Filter -> DispatcherServlet -> Spring Interceptor -> Controller Spring Interceptor는 Dispatchet Servlet과 컨트롤러 사이에서 컨트롤러 호출 직전에 호출 된다. Spring Interceptor는 Spring MVC가 제공하는 기능이기..
로그인 하지 않은 사용자가 상세 페이지 또는 앞으로 추가될 페이지에 접근하는 것을 막고싶다. 1. LoginCheckFilter class whitelist : 필터를 적용하지 않을 url 지정. ->회원등록, 로그인, 로그아웃, css관련 url은 해당 로직과 관계 없음. isLoginCheckPath() : 요청 url이 whitelist인지 아닌지 확인. PatternMatchinUtils를 사용하면 쉽게 비교 가능. @Slf4j public class LoginCheckFilter implements Filter { //얘네들은 필터 적용 안됨. private static final String[] whitelist = {"/", "/member/add", "/login", "/logout", "..
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와 세션에 보관..