Spring 8

스프링 시큐리티 - 3

세션 제어 필터 SessionManagementFilter 세션 관리 인증 시 사용자의 세션정보를 등록, 조회, 삭제 등의 세션 이력을 관리 동시적 세션 제어 동일 계정으로 접속이 허용되는 최대 세션 수를 제한 세션 고정 보호 인증 할 때마다 세션 쿠키를 새로 발급하여 공격자의 쿠키 조작을 방지 세션 생성 정책 Always, If_Required, Never, Statless ConcurrentSessionfilter 매 요청 마다 현재 사용자의 세션 만료 여부 체크 세션이 만료되었을 경우 즉시 만료 처리 session.isExpired() == true 로그아웃 즉지 오류 페이지 응답 ConcurrentSessionControlAuthenticationStrategy : 동시적 세션제어 담당. 최대세션..

Spring/Security 2022.12.07

스프링 시큐리티 - 2

익명사용자 인증 필터 AnonymousAuthenticationFilter SecurityContext에 인증객체(Authentication)가 존재하는지 아닌지 파악한다 인증객체가 존재하지않는다면 익명의 사용자로 파악하여 익명사용자용 인증객채(AnonymousAuthenticationToken)를 생성하여 토큰 발급 SecurityContext에 저장 인증사용자와 익명사용자를 구분해서 처리하기위한 용도 회원 인증여부를 구현할때 isAnonymous()와 isAuthenticated()로 구분해서 사용. 동시 세션 제어 최대 세션 허용 개수 초과했을때 1. 이전 사용자 세션 만료 sequenceDiagram autonumber actor U1 as 사용자 1 actor U2 as 사용자 2 partici..

Spring/Security 2022.12.05

스프링 시큐리티 - 1

FormLogin 인증 필터 graph TB A((user)) --> |Request| B[UsernamePasswordAuthenticationFilter] -->|요청정보가 매칭되는지 확인| C{AntPathRequestMatcher} --> |NO| D[chain.doFilter] C{AntPathRequestMatcher} --> |YES| E[Authentication] --> |인증| F{AuthenticationManager} --> |위임| G[AuthenticationProvider] --> |인증성공| F G --> |인증실패| H[AuthenticationException] --> B F --> I[Authentication] --> J[SecurityContext] UsernameP..

Spring/Security 2022.12.02

IoC, DI

스프링하면 뭐다? Ioc, DI.. 정리해봐야겠다. IoC (Inversion of Control) 흔히들 제어의 역전이라 부른다. 제어의 역전?? 뭐지? 제어의 역전? 대체 뭐지?? 쉽게 생각해서 내가 직접 new 키워드를 사용해 객체를 생성하는게 아니고 스프링 컨테이너가 생성해서 관리해준다. 따라서 내가 해야할 생성부터 라이프싸이클 관리를 내가아닌 컨테이너가 한다고해서 제어가 역전됐다고 표현한다. 제어를 컨테이너가 하기떄문에 DI혹은 AOP가 가능하다. 그럼 여기서 말하는 컨테이너가 뭐지? 이 Ioc컨테이너는 오브젝트의 생성, 관계설정, 사용, 제거 등의 작업을 사용자 대신해준다. 여기서 관리되는 오브젝트는 Bean이라고 불리운다. DI (Dependency Injection) 의존성 주입이다. 의존..

Spring 2022.06.10

Filter, Interceptor, AOP 차이점

우선 이 3 가지를 하나도 묶어서 차이점을 정리하는 이유는 이 세가지의 공통점이 있기 떄문이다. 작업을 하다보면 공통된 작업을 처리해야하는 경우가 발생하는데 예를들어 로그인 세션처리, 권한처리, 인코딩처리등 공통된 처리를 작업함에있어서 하나하나 다 따로 작성하면 중복코드도 많아지고 같은 기능을 다르게 처리하는 실수가 있을수있기에 이 3가지로 공통 처리를 하곤하는데 필터, 인터셉터, AOP 의 정확한 역할과 기능을 하고 사용해야 실수를 범하지않을수있지않을까 싶어서 정리한다. 또한 면접 단골 질문인거같다. 우선 순서를 정하면 Filter > Intercepter > AOP > Intercepter > Filter 순서로 진행된다. Filter 필터는 서블릿 전,후에서 작동한다. Filter 인터페이스를 상속..

Spring 2022.06.06

싱글톤 레지스트리

스프링 빈의 스코프 싱글톤 레지스트리 스프링 빈은 싱글톤으로 만들어지는게 기본이다. 싱글톤으로 만들어진 빈은 항상 같은 객체이다. 주로 언제나 같은값을 유지해야하는 DB정보같은곳에서 쓰인다. 스프링은 별다른 작업없이 빈 오브젝트를 생성하면 싱글톤 오브젝트로 생성하고 관리해준다. 프로토 타입 프로토타입 스코프 요청할때마다 새로 생성해서 보내준다. 웹 스코프 request 스코프 요청이 들어오고 나갈때까지 유지된다. session 스코프 HTTP Session과 동일한 생명주기 application 서블릿 컨텍스트(ServletContext)와 동일한 생명주기를 가지는 스코프 websocket 웹 소켓과 동일한 생명주기를 가지는 스코프

Spring 2021.09.02

XML - DTD와 Schema

XML (eXtensible Markup Language) 확장가능한 마크업 언어. 말 그대로 확장 가능한 마크업 언어다. 특정 언어에 종속되어있지않고 독립적이다. 정해진 태그(html같은?) 만 사용이 아닌 사용자가 직접 태그를 만들어서 사용가능하다. DTD(Document Type Definition) 이란? 말 그대로 문서 타입 정의 이다. 문서타입을 정의함으로써 적절한 요소, 속성을 사용하게한다. XML 문서의 구조가 유효한지 확인한다. 형태로 쓰인다. 가장큰 단점으로 네임스페이스를 지원하지 않는다. Schema 란? XML 문서의 모든 속성과 요소에 대한 규칙을 정의한다. DTD와 큰 차이로는 네임스페이스를 지원한다.

Spring 2021.08.30

DI(Dependency Injection) 과DL(Dependency Lookup)

의존관계 주입(DI)과 의존관계 검색(DL) DI컨테이너에 런타임 시 의존 오브젝트를 수동적으로 전달받아서 사용한다. DL은 의존관계를 맺는 방법이 외부로부터 주입받지 않고, 능동적으로 검색해서 관계를 맞는다. DI와 동일하게 런타임시 주입받지만 스스로 생성한다는 게 중요하다. 메서드나 생성자를 통해 주입받는 게 아닌 스스로 컨테이너에 요청을 한다. 둘의 큰 차이는 DI는 받듯이 빈 오브젝트여야 하지만 DL은 검색하려는 DL오브젝트는 빈 오브젝트일 필요는 없다.

Spring 2021.08.29