전체 글

->FilterChainProxy의 VirtualFilterchain는 doFilter()를 통해 책임 연쇄 패턴 즉, 설정된 필터들을 doFilter()한다.->이때, 우리는 몇개의 Filter의 동작을 볼 필요가 있다.1. AnonymousAuthenticationFilter(익명 인증 필터) //첫번째 코드===============================================->VirtualFilterChain 클래스의 doFilter() 시 맨 위의 doFilter()가 실행된다.->아예 쌩 첫 요청이라 가정(localhost:8080)->현재 Session이나 뭐, DB등 어떠한 저장소에도 SecurityContext가 없다.->getDeferredContext()로 deferre..
책임 연쇄 패턴이란?->위의 코드 == FilterChainProxy 안의 static class VirtualFilterChain이다.->아래 코드 == AbstractAuthenticationProcessingFilter의 doFilter이다.(여러 필터들로 퉁침) &&&&&&&이해하기&&&&&&&&&**각 클래스 설명->Filter라는 인터페이스에는 doFilter()라는 메서드가 있다.->VirtualFilterChain이라는 클래스는 Filter를 구현하여 doFilter 메소드가 있다.->여러 필터들은 Filter를 구현하여 doFilter 메소드가 있다.**doFilter()의 역할 설명->VirtualFilterChain의 doFilter() 메소드는 List의 인덱스를 증가시켜 nextF..
1. SecuritycontextHolderFilter->인증을 위한 첫 필터이다. ->잘못된 동작으로 인한 중복된 Authentication 필터 적용을 방지한다.->SecurityContextRepository를 통해 SecurityContext(SupplierDeferredSecurityContext)를 가져온다.->가져온 SecurityContext를 SecurityContextHolderStrategy 객체 안의 static 필드 ContextHolder에 저장하여 한 스레드 안의 모든 구간에서 SecurityContext를 쓸 수 있게 한다. 2. SupplierDeferredSecurityContext(위에 보이는 deferredContext변수)->securityContextReposito..
클라이언트에서 요청이 들어오면,여러 표준 서블릿 필터가 진행되는 와중DelegatingFilterProxy로 요청이 들어온다. DelegatingFilterProxy는 의존주입을 통해, delegate라는 필터를 받는데,이때, 스프링 시큐리티를 사용한다면 delegate는 FilterChainProxy라는 필터가 될 수 있다.->FilterChainProxy는 Filter를 구현하고 있기 때문...->FilterChainProxy에는 애플리케이션 컨텍스트에 포함된 모든 필터 체인들을 등록한다.(의존주입....상당히 어렵네..) 다른 표준 서블릿 필터와 같이 doFilter 메서드를 실행한다.request, response, filterChain(이 filterChain은 표준 서블릿 필터 체인이다 착각하..
위의 다이어그램을 코드로 짜본다. jpa 엔티티 매핑을 생각하며, 짜본다. 1. Member 1. id @Id, @GeneratedValue, @Column(name = "member_id") 2. name 3. address embedded 타입의 Address 엔티티. -> @Embedable 4. orders Member엔티티와 Order엔티티는 양방향 일대다 관계이다. -양방향: 연관관계의 주인 -연관관계의 주인은 보통 일보단 다쪽이다. -즉, mappedBy를 통해 Order쪽에 자신의 pk가 있음을 선언한다. --> @OneToMany(mappedBy = "member") = Order엔티티의 member컬럼(필드)에 자신의 pk가 있다. package jpabook.jpabook.domain..
· jpa 개념
JPA는 객체를 통해 데이터베이스와 상호작용한다. 위의 코드를 보면 우리는 EntityManager를 통해 1. 객체를 등록 -> 쿼리를 통해 데이터 베이스에 저장 2. 수정 -> 수정된 값을 무언가? 가 알아서 읽어서 데이터베이스에 쿼리를 통해 저장 3. 한 건 조회 -> Member.class 중 특정 id를 조회 하였다. 이렇게 jpa에서는 무언가?를 통해 등록, 수정, 조회 등 데이터베이스와 상호작용을 할 수 있었다. 그 무언가에 대하여 알아보자. 1. 무언가란 무엇인가? 이것은 바로 영속성 컨텍스트라는 것이다. 영속성 컨텍스트 영속성 컨텍스트란 엔티티(객체)를 저장할 수 있는 환경이다. 즉, 로직을 통해 객체 등록 로직 -> 영속성 컨텍스트에 저장 + 객체 정보를 데이터 베이스에 저장하는 쿼리 ..
· jpa 개념
package jpabook.start; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; @Entity //Entity는 이 클래스를 테이블과 매핑한다고 알려준다.->엔티티 클래스 @Table(name="MEMBER") // public class Member{ @Id @Column(name="ID") private String id; @Column(name="NAME") private String username; //매핑 정보가 없는 필드 private Integer age; //Getter, setter public Str..
기본적으로 스프링은 프로젝트의 의존성 추가 등의 시작 과정이 매우 복잡하기 때문에, 이를 쉽게 start.spring.io 를 이용하여 만들 수 있다. 위를 보면 의존성에 1. spring web: 스프링으로 웹을 만들기 위한 라이브러리 2. thymeleaf: jsp같은 java/html/xml 기반 템플릿 엔진 3. spring data jpa 4. lombok: 불필요한 반복되는 코드를 줄이기 위한 의존성 5. h2 database: h2 데이터베이스를 사용하는데 필요한 라이브러리 이렇게 5개가 추가된 것을 볼 수 있다. 그 후 프로젝트를 만든 후 open 해준다. 의존성까지 다 추가했다면, 롬복과 여러 어노테이션을 사용하기 위한 준비를 해야한다. 우측 상단 setting->plugins(검색)에서..
쥐4
결국 이기는 개발자