전체 글 779

[ Spring Security ] 07. 주요 아키텍쳐 : DelegatingFilterProxy & FilterChainProxy

인프런에서 진행하는 정수원 강사님의 "스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security" 강의를 보고 학습을 위해 개인적으로 추가/정리한 글임을 알립니다. Spring Security 주요 아키텍쳐 DelegatingFilterProxy Filter는 Servlet 2.3부터 제공되는 기술이다. 필터의 역할은 어떤 요청이 있을 때 이 요청이 실제로 서블릿으로 들어오는데, 서블릿 자원에 들어오기 전에 처리를 하는 곳이 필터. 요청에 대한 최종적인 접근 전, 후로 어떤 처리를 할 수 있도록 하는 기술이 필터이다. 이 필터는 서블릿 스펙에 있는 기술이기 때문에 Servlet 컨테이너에서 생성되고 실행이 되기 때문에, 필터는 Spring에서 만든 Bean을 Injection..

[ Java ] 28. 정적 팩토리 메서드?!

정적 팩토리 메서드 우리가 어떤 인스턴스를 새로 생성할 때는 보통 생성자를 이용한다. 보통 실제 개발에 가면 public 생성자(혹은 빌더패턴)를 주로 이용해서 사용하는데, 이보다 좀 더 나은 방법이 있어서 포스팅한다. public class Product { private String name; public Product(String name) { this.name = name; } public static void main(String[] args) { Product product = new Product("book"); } } 위의 예는 생성자를 이용한 매개변수로 객체를 생성하는 모습이다. 매개변수 하나일 때는 쉽게 예상이 가겠지만 매개변수가 점점 늘어나고 복잡해지면 하지만 개발자가 생성자의 매개변..

[ Spring Security ] 06. CSRF Filter

인프런에서 진행하는 정수원 강사님의 "스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security" 강의를 보고 학습을 위해 개인적으로 추가/정리한 글임을 알립니다. CSRF 사이트 간 요청 위조 공격 CSRF란 사용자의 의도와는 무관하게 공격자가 심어놓은 행위로, 공격자가 의도한대로 응답하는 공격이다. 그래서 Spring-Security는 이런 취약점을 방지하기 위한 API를 제공한다. CsrfFilter CSRF의 취약점을 방지하는 필터이다. 모든 요청에 랜덤하게 생성된 토큰을 HTTP 파라미터로 요구한다. 요청 시 전달되는 토큰 값과 서버에 저장된 실제 값과 비교한 후 만약 일치하지 않으면 요청은 실패한다. Client 서버의 자원에 접근할 때는 HTTP 메소드(PATCH..

[ Spring Security ] 05. 인증/인가 API의 예외처리

인프런에서 진행하는 정수원 강사님의 "스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security" 강의를 보고 학습을 위해 개인적으로 추가/정리한 글임을 알립니다. 인증/인가 API ExceptionTranslationFilter FilterSecurityInterceptor(맨 마지막에 위치)가 이를 호출한다 ExceptionTranslationFilter 필터는 아래 두가지 예외를 처리하고 있다. AuthenticationException 인증 예외 처리 AuthenticationEntryPoint 호출 로그인 페이지 이동 401 오류 코드 전달 등 인증 예외가 발생하기 전의 요청 정보를 저장 RequestCache : 사용자의 이전 요청 정보를 세션에 저장하고 이를 꺼내..

[ Java ] 27. Iterable과 Iterator 인터페이스

Iterable vs Iterator 이 주제를 공부하게 된 이유는 Java로 알고리즘을 구현하면서 Iterator를 자주 사용했었는데 문득, Iterable과의 차이에 대해서 알지 못해 이번 기회에 학습하기 위해 기록을 시작한다. 먼저 Collection Framework에 대해서 알아야 하는데 이 컬렉션 프레임워크는 여러 데이터를 효과적으로 처리하기 위한 방법을 제공하는 클래스의 집합이다. 즉, 데이터를 저장하는 자료구조와 그를 처리하는 알고리즘을 구조화해서 클래스로 구현한 것이다. 이 컬렉션 프레임워크는 자바에서 인터페이스(Interface)를 사용해서 구현되고, 컬렉션 프레임워크에서는 다음에 더 자세하게 알아볼 예정이다. Iterable 다시 돌아와서 public interface Collecti..

[ Spring Security ] 04. 인가 API와 표현식

인프런에서 진행하는 정수원 강사님의 "스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security" 강의를 보고 학습을 위해 개인적으로 추가/정리한 글임을 알립니다. 인가 API [ 권한설정과 표현식 ] 선언적 방식 URL http.antMatchers("/users/**").hasRole("USER") Method @PreAuthorize("hasRole('USER')") public void user() { System.out.println("user"); } 동적 방식 (DB 연동 프로그래밍) URL Method > 권한 설정 protected void configure(HttpSecurity http) throws Exception { http .antMatcher("/..

[ Spring Security ] 03. 동시 세션제어와 세션 고정보호, 세션 정책 관리

인프런에서 진행하는 정수원 강사님의 "스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security" 강의를 보고 학습을 위해 개인적으로 추가/정리한 글임을 알립니다. [ 동시 세션 제어, 세션 고정 보호, 세션 정책 ] > 동시 세션 제어 동일한 계정으로 인증을 받을 때 생성되는 세션에 허용 개수가 초과 되었을 경우 어떻게 세션을 유지하는 지에 대한 제어를 말한다. Spring-Security에서는 두 가지 전략으로 동시세션제어를 하게 된다. default 최대 세션 허용 개수 : 1개 동일한 계정으로 들어온 사용자에 대해서 세션 허용 개수 이전 사용자 세션 만료 사용자 1의 세션은 만료 되고 사용자 2의 세션은 사용가능 하다. 현재 사용자 인증 실패 뒤늦게 들어온 사용자 2의..

[ Spring Security ] 02. 익명 사용자 인증처리 필터 : AnonymousAuthenticationFilter

인프런에서 진행하는 정수원 강사님의 "스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security" 강의를 보고 학습을 위해 개인적으로 추가/정리한 글임을 알립니다. 익명 사용자 인증처리 필터 익명 사용자와 인증 사용자를 구분해서 처리하기 위한 용도로 사용되는 필터. 화면에서 인증 여부를 구현할 때 isAnonymous() 와 isAuthenticated()로 구분해서 사용한다. (login / logout 과 같은 기능을 나누어서 처리 가능) 인증객체를 세션에 저장하지 않는다. 어떤 사용자가 인증을 받았을 때, 세션에 사용자의 유저 객체를 저장을 한다. 사용자가 어떤 자원에 접근하려고 하면 이 사용자가 저장한 유저 ..

[ Spring Security ] 01. Remember-Me 인증이란?

인프런에서 진행하는 정수원 강사님의 "스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security" 강의를 보고 학습을 위해 개인적으로 추가/정리한 글임을 알립니다. [ Remember Me 인증 ] : RememberMeAuthenticationFilter Remember-Me ? 세션이 만료되고 웹 브라우저가 종료된 이후에도 어플리케이션이 사용자를 기억하는 기능 Remember-Me 쿠키에 대한 Http 요청을 확인한 후에 토큰 기반 인증을 사용해서 유효성을 검사하고 토큰이 검증되면 사용자는 로그인 된다. 사용자 Life Cycle 인증 성공(Remember-Me 쿠키 설정) 인증 실패(쿠키가 존재하면 쿠키 무효화) 로그아웃(쿠키가 존재하면 쿠키 무효화) protected ..

[ Spring Security ] 00. LoginForm 인증 API 및 Filter의 이해

인프런에서 진행하는 정수원 강사님의 "스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security" 강의를 보고 학습을 위해 개인적으로 추가/정리한 글임을 알립니다. [ Login 인증 ] UsernamePasswordAuthenticationFilter SecurityContext : 인증 필터가 사용자의 인증을을 가지고 있는 Context SecurityContextHolder.getContext().getAuthentication() : 어디서든 현재 어떤 인증을 받았는지 볼 수 있다. protected void configure(HttpSecurity http) throws Exception { http.formLogin() .loginPage("/login.html")..

[ BOJ ][JAVA][21938] 영상처리

https://www.acmicpc.net/problem/21938 21938번: 영상처리 화면의 세로 $N$, 가로 $M$ 값이 공백으로 구분되어 주어진다. 두 번째 줄부터 $N + 1$줄까지 $i$번째 가로를 구성하고 있는 픽셀의 $R_{i,j}$, $G_{i,j}$, $B_{i,j}$의 값이 공백으로 구분되어 총 $M$개 주어진 www.acmicpc.net 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 1 초 512 MB 312 118 97 38.189% 문제 간단하지만 귀찮은 영상처리 과제가 주어졌다. 과제의 명세는 다음과 같다. 세로 길이가 N$N$이고 가로 길이가 M$M$인 화면은 총 N$N$ × M$M$개의 픽셀로 구성되어 있고 (i,j)$(i, j)$에 있는 픽셀은 Ri,j$R_{..

[ Java ] 26. 얕은복사와 깊은복사

얕은복사와 깊은복사 Java에서 변수를 복사하고자 할 때 일어날 수 있는 두 가지 경우인 Shallow Copy(얕은 복사)와 Deep Copy(깊은 복사)에 대해서 알아보겠다. Shallow Copy는 "주소값"을 복사한다. 이 말은 기존에 참조하고 있던 실제 값은 바뀌지 않고 동일하다는 뜻이다. 즉, 한 쪽 배열에서 수정이 일어나면 나머지 다른쪽 배열에서도 수정이 반영된다. 이에 반해 Deep Copy는 "실제값"을 복사해서 이 값을 새로운 메모리 공간에 복사하게 된다. 즉, 한쪽 배열에서 수정이 일어나더라도 다른쪽 배열에는 아무런 영향을 끼치지 못한다. 코드를 통해서 알아보자. public class Copy { String name; long cnt; public Copy(String name, ..

[ Java ] 25. lambda와 effectively final

lambda 와 effectively final JDK 1.8에서 추가된 람다식에는 규칙이 있다. 람다식은 외부 block에 있는 변수에 접근할 수 있다. 외부에 있는 변수가 지역 변수 일 경우 final 혹은 effectively final인 경우에만 접근할 수 있다. effectively final이란? A non-final local variable or method parameter whose value is never changed after initialization is known as effectively fianl. Java8에 추가된 syntatic sugar의 일종으로, 초기화 된 이후 값이 한번도 변경되지 않았다면 effectively final이라고 할 수 있다. effective..

[ Java ] 24. 익명클래스보다는 람다

익명 클래스보다는 람다 자바에서 함수 타입을 표현할 때는 추상 메서드를 하나만 담은 인터페이스(또는 추상 클래스)를 사용했다. 이러한 인터페이스의 인스턴스를 함수 객체라고 해서 특정 함수나 동작을 나타내는데 썼다. 익명 클래스 JDK 1.1 버전부터 함수 객체를 만들 때 익명 클래스(Anonymous Class)를 주로 사용했다. 하지만 익명 클래스 방식은 코드가 너무 길기 때문에 이 떄까지의 자바는 함수형 프로그래밍에 적합하지 않았다. import java.util.*; public class Main { public static void main(String[] args) { List Words = Arrays.asList("APPLE", "Banana", "orange", "korea"); Coll..

[ Java ] 23. 자바에서의 함수형 프로그래밍

함수형 프로그래밍 프로그래밍의 패러다임은 프로그래머에게 프로그래밍의 관점을 갖게 하고 어떻게 코드를 작성할지 결정하게 하기 때문에 큰 역할을 한다고 볼 수 있다. 명령형 프로그래밍 : 무엇(What)을 할 것인지 보다는, 어떻게(How)할 건지 설명 절차적 프로그래밍 (Tow-Down) 단순히 순차적으로 프로그래밍 하는 것이 아니라, 프로시저 콜이라는 함수 호출을 통해 명령을 수행하는 것. (C, C++) 객체지향 프로그래밍 실제 세계를 모델링하여 객체 간의 상호작용을 나타내는 개발 방법(C++, Java, C#) 선언형 프로그래밍 : 어떻게(How)를 나타내기 보다 무엇(What)을 할 건지 설명 함수형 프로그래밍 순수 함수를 조합하고 소프트웨어를 만드는 방식(클로저, 하스켈, 리스프) > 함수형 프로..