| User-Service에 JWT 생성 (JSON Web Token) JWT Dependency 추가 io.jsonwebtoken jjwt 0.9.1 AuthenticationFilter.java protected void successfulAuthentication(HttpServletRequest request, HttpServletResponse response, FilterChain chain, Authentication authResult) throws IOException, ServletException { log.debug( ((User)authResult.getPrincipal()).getUsername() ); String userName = ((User)authResult.getPri..
| User-Service에 인증권한 추가 (Authentication) RequestLogin.java 사용자 로그인 정보를 저장하기 위한 RequestLogin Model 클래스 import lombok.Data; import javax.validation.constraints.Email; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; @Data public class RequestLogin { @NotNull(message = "Email cannot be null") @Size(min = 2, message = "Email not be less than two characters") @Em..
| Order-service 💻 실습소스 https://github.com/yOneChu/springcloud_HomeToy/tree/master/order-service GitHub - yOneChu/springcloud_HomeToy: SpringCloud, Cloud Bus, RabbitMQ, Kafka SpringCloud, Cloud Bus, RabbitMQ, Kafka. Contribute to yOneChu/springcloud_HomeToy development by creating an account on GitHub. github.com 💻 OrderEntity package com.example.orderservice.jpa; import lombok.Data; import org.h..
| Catalog-service 💻 실습소스 https://github.com/yOneChu/springcloud_HomeToy/tree/master/catalog-service GitHub - yOneChu/springcloud_HomeToy: SpringCloud, Cloud Bus, RabbitMQ, Kafka SpringCloud, Cloud Bus, RabbitMQ, Kafka. Contribute to yOneChu/springcloud_HomeToy development by creating an account on GitHub. github.com 💻 1. API-Gateway에 설정 spring: application: name: apigateway-service cloud: gatewa..
| User-service와 Spring Cloud Gateway 연동 💻 user-service.java > application.yml server: port: 0 spring: application: name: user-service datasource: url: jdbc:postgresql://localhost:5432/basic username: postgres password: 1234 driver-class-name: org.postgresql.Driver jpa: hibernate: ddl-auto: create properties: hibernate: show_sql: true format_sql: true eureka: instance: hostname: localhost instanc..
persitence.xml
목표 : JSON 요청 -> JSON으로 데이터 받기 1. JSON으로 요청 2. 컨트롤러 @ResponseBody @PostMapping("/request-body-json-v3") public HelloData requestBodyJsonV3(@RequestBody HelloData helloData) throws Exception { log.info("username={}, age", helloData.getUsername(), helloData.getAge()); return helloData; } HTTP의 컨버터가 요청한 Content-type이 application/json 이라는 것을 인식하고 객체에 맞게 변환해 준다. @RequestBody는 생략 불가능이다. 만약 @RequestBody..
📝 준영속 영속성 컨텍스트가 관리하는 영속 상태의 엔티티가 컨텍스트에서 분리된 것을 준영속 상태라 한다. 준영속 상태의 엔티티는 영속성 컨텍스트가 제공하는 기능을 사용할 수 없다. 준영속 상태로 만드는 방법 em.detach(entity): 특정 엔티티만 준영속 상태로 전환 em.clear(): 영속성 컨텍스트를 완전히 초기화 em.close(): 영속성 컨텍스트 종료 특징 거의 비영속 상태에 가깝다 식별자 값을 가지고 있다 이미 한번 영속 상태였으므로 식별자 값을 가지고 있다 지연로딩을 할 수 없다 지연로딩(Lazy Loading)은 실제 객체 대신 프록시 객체를 로딩해두고 해당 객체를 실제 사용할 때 영속성 컨텍스트에서 데이터를 불러오는 방법이다.
📝 플러시 플러시(flush())는 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영한다. 플러시라는 이름으로 인해 영속성 컨텍스트에 보관된 엔티티를 지운다고 생각하면 안 된다. 즉, 변경내용을 데이터베이스에 동기화하는 것이 플러시이다. 1. 동작방법 변경감지가 동작해서 영속성 컨텍스트에 잇는 모든 엔티티를 스냅샷과 비교해서 수정된 엔티티를 찾는다. 수정된 엔티티는 수정쿼리를 만들어 쓰기 지연 SQL 저장소에 등록한다. 쓰기지연 SQL 저장소의 쿼리를 데이터베이스에 전송한다 2. 영속성 컨텍스트를 플러시하는 3가지 방법 em.flush() 호출 트랜잭션 커밋 시 flush() 자동호출 JPQL 쿼리 실행 시 flush() 자동호출 em.persist(memberA) em.persist(memberB) /..
📝 동시세션 제어 동일한 계정으로 들어왓을 때 동시 세션 제어 http.sessionManagement() // 세션 관리 기능 작동 .maximumSession(1) // 최대 허용 가능 세션 수, -1: 무제한 로그인 세션 허용 .maxSessionPreventsLogin(true) // 동시로그인 차단, false: 기존 세션 만료(default) .invalidSessionUrl("/invalid) // 세션이 유효하지 않을 때 이동 할 페이지 .expiredUrl("/expired") //세션 만료된 경우 이동 할 페이지 .sessionFixation().changeSessionId() // 인증 성공 시 세션은 그대로두고 세션아이디를 변경한다 📝 세션고정보호 인증에 성공할 때마다 새로운 세션을..
AnonymousAuthenticationFilter 익명사용자 인증 처리 필터 AnonymousAuthenticationFilter 는 null아 아니라 별도의 익명사용자를 만들어 처리한다. 인증객체를 세션에 저장하지 않는다 인증을 받게되면 세션에 user객체를 저장한다. 저장 후, 어떤 자원에 접근하려고하면 인증객체가 존재하는지 or null인지 체크하여 null이면 접근을 못하게하고 null이 아니면 인증된걸로 인식하여 접근하게한다 익명객체 존재여부 판단(익명객체는 보통 SecurityCotext에 있다) 존재한다. 그 다음필터 실행 존재하지 않는다. -> 인증객체 생성 (AnonymousAuthenticationToken) 테스트 @Configuration @EnableWebSecurity @Re..
📝 엔티티 매니저 팩토리와 엔티티 매니저 JPA가 제공하는 기능은 엔티티와 테이블을 매핑하는 설계부분과 매핑한 엔티티를 실제 사용하는 부분으로 나눌 수 있다. 엔티티 매니저는 엔티티를 저장하고 수정하고 삭제하고 조회하는 등 엔티티와 관련된 모든 일을 처리한다. 즉, 엔티티를 관리하는 관리자다. 엔티티 매니저 팩토리는 한개 만 만들어서 애플리케이션 전체에서 공유하도록 설계되어 있다. 엔티티 매니저 팩토리는 여러 스레드가 동시에 접근해도 안전하지만, 엔티티 매니저는 여러 스레드가 동시에 접근하면 동시성 문제가 발생하므로 스레드 간에 절대 공유하면 안된다. 엔티티 매니저 트랜잭션을 시작할 때 커넥션을 획득한다. 📝 영속성 컨텍스트란? 영속성 컨텍스트(Persistence context)는 엔티티를 영구 저장하..