분류 전체보기 1341

Ch03. 실전프로젝트(인증 프로세스 Form 인증 구현) - 인증 성공 핸들러(CustomAuthenticationSuccessHandler)

CustomSuccessHandler 만들기 cache를 사용하여 인증이 되기 전, 사용자가 접근했던 URL로, 인증이 성공했을 때 접근하도록 구현하였다. saveRequest가 Null일 경우는 인증전 사용자가 접근했던 URL이 없는 것으로 /로 이동한다. saveRequest가 Null이 아닐 경우는 인증 전 사용자가 접근했던 URL로 이동한다.

Ch03. 실전프로젝트(인증 프로세스 Form 인증 구현) - 인증 부가 기능(WebAuthenticationDetails, AuthenticationDetailsSource)

WebAuthenticationDetails 인증 과정 중 전달된 데이터를 저장 Authentication의 details 속성에 저장 AuthenticationDetailsSource WebAuthenticationDetails 객체를 생성 Authentication객체 안에 details라는 속성이 있고, 이는 WebAuthenticationDetails라는 클래스 객체가 저장되어 있다. WebAuthenticationDetails 안에는 클라이언트에게 입력받은 여러 값들이 저장되어 있다. WebAuthenticationDetails 같은 경우 AuthenticationDetailsSource가 생성해 준다. form에 부가적으로 저장할 데이터 저장 해당 값은 Authentication객체에 deta..

Ch03. 실전프로젝트(인증 프로세스 Form 인증 구현) - 로그아웃 및 인증에 따른 화면 보안 처리

로그아웃 방법 태그를 사용해서 POST로 요청 태크를 사용해서 GET GET으로 요청 – SecurityContextLogoutHandler 활용 인증 여부에 따라 로그인/로그아웃 표현 로그인 로그아웃 thymeleaf에서 인증 객체가 있고 없고를 판단해줄 수 있다. thymeleaf-extras-springsecurity5 해당 Dependency 가 추가되어 있어야 한다. https://www.thymeleaf.org/doc/articles/springsecurity.html Thymeleaf + Spring Security integration basics - Thymeleaf Have you switched to Thymeleaf but your login and error pages are st..

Ch03. 실전프로젝트(인증 프로세스 Form 인증 구현) - 커스텀 로그인 페이지 생성하기

Login.HTML 아이디와 비밀번호를 입력해주세요 로그인 LoginController loginPage 같은 경우 Custom loginPage로 이동한다 /user/login/login 파일로 이동한다. loginProcessingUrl 같은 경우 form Action과 동일하게 설정한다. defaultSuccessUrl로 성공 시 이동되는 Url을 설정한다. permitAll로 해당 URL로 접근할 경우에는 모두 접근이 허용되도록 한다.

Ch03. 실전프로젝트(인증 프로세스 Form 인증 구현) - DB 연동 인증 처리 CustomUserDetailsService

CustomUserDetailsService(1) UserDetails를 연동할 CustomService를 작성한다. UserDetailsService를 구현한 내 커스텀 Class를 작성한다. 내 DB에 있는 데이터를 읽어와야 하므로, 내 DB에 존재하는 UserRepository를 Autowire 한다. loadUserByUsername을 구현해야 하는데, 이때, DB에서 값을 조회해 없으면 예외를 발생시킨다. 값이 있다면, AccountContext에서 UserDetailsType을 반환하여 리턴한다. AccountContext 생성자로, 내 인증 객체인 account와 권한을 입력받는다. 권한은 List와 같은 Collection으로 입력받는데. SecurityContext 수정 더 이상 제공되는..

Ch03. 실전프로젝트(인증 프로세스 Form 인증 구현) - 사용자 DB 등록 및 PasswordEncoder

Spring Security 5.0 이전에는 기본 PasswordEncoder 가 평문을 지원하는 NoOpPasswordEncoder(현재는 사용 X) 암호화 포맷 : {id} encodedPasswordencodedPassword bcrypt, noop, pbkdf2, scrypt, sha256 기본 포맷은 Bcrypt : {bcrypt}$2a$10$dXJ3SW6G7P50lGmMkkmwe.20cQQubK3.HZWzG3YB1tlRy.fqvM/BG 생성 PasswordEncoder passwordEncoder = PasswordEncoderFactories.createDelegatingPasswordEncoder() 인터페이스 encode(password) 패스워드 암호화 matches(rawPasswor..

Ch03. 실전프로젝트(인증 프로세스 Form 인증 구현) - 정적 자원 관리(WebIgnore 설정)

js / css / image 파일 등 보안 필터를 적용할 필요가 없는 리소스를 설정 보안 필터를 적용할 필요가 없는 정적인 파일들의 제외하도록 할 수 있다. permitAll - Ignore 차이 : permitAll 같은 경우 보안 필터에 접근하여 통과하는 것이지만 Ignore같은 경우 보안필터에 접근조차 하지 않는다.

Ch03. 실전프로젝트(인증 프로세스 Form 인증 구현) - 실전 프로젝트 생성

Build.gradle org.springframework.boot spring-boot-starter-data-jpa org.springframework.boot spring-boot-starter-security org.springframework.boot spring-boot-starter-thymeleaf org.thymeleaf.extras thymeleaf-extras-springsecurity5 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-devtools runtime true com.h2database h2 runtime org.springframework.boot spring-bo..

Null Object pattern

인터페이스는 구현하지만 아무 일도 하지 않는 객체 null 참조 대신 알려진 인터페이스를 구현하는 구체적인 클래스의 인스턴스를 사용하여 달성됩니다. Gof의 디자인 패턴에는 없는 목록의 패턴이지만 자주 사용되는 디자인 패턴 기법이다. 구현이 매우 심플하며, 나름 중요한 의미가 있는 패턴 주의 이 패턴을 잘못 도입하면 예외나 에러를 탐지하기 어려워지는 경우가 있다. 도입했을 때 클래스와 코드가 마구 늘어난다면 이 패턴이 적절하지 않은 상황이거나 잘못 구현한 것이다. 인터페이스를 통해 관계를 느슨하게 만든 뒤, Null 객체를 만들어 null일 경우 해당 객체를 반환하는 것이다. Ex) null 체크 코드는 흔한 관용구이지만, 읽기도 불편하고 실수하기도 쉽다는 문제가 있다. 만약 존재하지 않는 직원을 조회했..

Ch02. 스프링 시큐리티 주요 아키텍처 이해 - 스프링 시큐리티 필터 및 아키텍처 정리

Security 초기화 설정 파일을 기반으로 Filter를 생성하여 WebSecurity에 전달 FilterChainProxy에 생성자로 Filter로 전달 Servlet Filter에서 요청이 들어오게 되면 DelegatingFilterProxy에서 요청이 들어오게 되면, springSecurityFilterChain으로 등록된 빈을 찾게 되는데 이게 FilterChainProxy로 등록이 되어 있으므로 FilterChainProxy에 요청을 위임한다. 인증 / 자원 접근 시도 SecurityContextPersistenceFilter SecurityContext 객체를 세션에 저장하고, 조회하는 역할을 하는 필터 초기 SecurityContext 객체가 세션에 저장되어 있지 않으므로 세션에 저장하고,..