본문 바로가기
관리자

Programming-[Backend]

(417)
[스프링 시큐리티] 14. 인증 실패, 거부 처리 ; AuthenticationHandler, AccessDeniedHandler 1. 인증 실패 처리 인증 실패를 처리하는 과정은 이전 글의 인증 성공처리를 하는 부분과 매우 유사하다. CustomAuthenticationHandler를 작성한다. @Component public class CustomAuthenticationFailureHandler extends SimpleUrlAuthenticationFailureHandler { @Override public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) throws IOException, ServletException { String errorMessage..
[스프링 시큐리티] 13. 인증 부가/ 성공 처리 기능 : WebAuthenticationDetails, AuthenticationSuccessHandler 1. Details 정보 넣기 Details는 기본적으로는 username, password 정보를 갖는 객체이지만, 추가로 정보를 넣어 인증 과정에 활용할 수도 있다. 아래 예시는 클라이언트에서 form 태그에서 secret_key라는 정보를 서버로 넘겨주어야만 인증이 되게 하는 방식이다. SecurityConfig에서 authenticationDetailsSource 사용 설정 우선 SecurityConfig 설정 파일에서 authenticationDetailsSource 메서드를 사용하여 Details 정보를 추가할 수 있도록 설정해준다. .authenticationDetailsSource에 대해 의존성 추가 작업도 해준다. private final AuthenticationDetailsSource..
[스프링 시큐리티] 12. DB 연동 인증 처리 : AuthenticationProvider, 로그인 및 로그아웃 페이지 처리 1. DB 연동 인증 : AuthenticationProvider 사용 이전 글에서는 AuthenticationManager 단에서 userDetailsService 메서드를 활용해서 인증을 처리했다. SecurityConfig에서 해당 메서드를 불러와서 처리되는 과정까지만 학습했다. 이번 글에서는 한 단계 더 나아가서, AuthenticationManager에서 호출하는 AuthenticationProvider의 기능을 구현해본다. SecurityConfig - authenticationProvider SecurityConfig 클래스에서는 이전에 사용했던 userDetailsService 대신 authenticationProvider 메서드를 사용한다. 여기서 authenticationProvider..
[스프링 시큐리티] 11. 회원가입, DB 연동 인증 처리 1. 회원가입 처리 회원가입을 해본다. 강의에서 정확한 소스 코드를 찾을 수 없어서 내 맘대로 작성한 코드라 UI나 코드 효용성이 별로일 수 있다. 그리고 기록을 위해서 대부분의 코드를 붙여놓겠다. UserController /users url로 Get, Post Mapping을 한다. 회원등록을 할 수 있는 GetMapping 페이지에는 model 객체에 roles를 전달해준다. 회원등록을 실제 진행하는 PostMapping에서는 사용자의 입력값을 AccountDto 형태로 받아온다. userService에서 userRepository.save를 할건데, 해당 레포지토리는 Account Entity 형태로만 저장이 가능하므로 modelMapper를 이용한다. @Controller @AllArgsCons..
[스프링 시큐리티] 10. 프로젝트 생성, PostgreSQL, PasswordEncoder, WebIgnore 1. 프로젝트 생성 강의에서 제공하는 소스 코드를 활용하여 처음부터 rebuilding 해본다. 정수원님 스프링 시큐리티 강의 소스 https://github.com/onjsdnjs/corespringsecurity fork 후 내 repository에서 새로운 branch를 따고, 강의를 따라하며 원리를 이해하면 될 것 같다. PostgreSQL 강의에서는 postgreSql을 사용한다. 앱을 실행하려면 application.properties에 DB 연결 정보가 있어야되는데, 강의에서 주어진 코드의 연결정보로는 연결이 어려울 수 있다. 그래서 잠시 postgreSql을 공부해야되는데, 괜찮은 블로그가 참조 2에 있다. 편의를 위해 application.properties 파일은 application...
[스프링 시큐리티][작성중][메모] 9. 주요 아키텍처 이해 1. 위임 필터 및 필터 빈 초기화 서블릿 컨테이너가 사용하는 filter 중 DelegatingFilterProxy라는 필터가 있어서, 스프링 컨테이너에서 이를 활용한다. DelegatingProxyChainFilter는 springSecurityFilterChain이라는 이름의 스프링 빈을 찾아서 서블릿 컨테이너에 등록하고 사용할 수 있도록 한다. springSecurityFilterChain이 앞선 글들에서 살펴봤던 FilerChainProxy이다. SecurityFilterAutoConfiguration이 서블릿 컨테이너에서 필터들을 등록하는 클래스이다. 스프링의 컨테이너는 WebSecurityConfiguration이며 여기서 생성하는 Bean이 FilterChainProxy이다. FilterC..
[스프링 시큐리티] 8. 위조 방지 : CsrfFilter 1. CSRF(Cross-site Request Forgery) 공부해봤던 공격 방식이다. 쇼핑몰 사이트에 사용자가 로그인을 해서 토큰을 가진채로 공격자가 보낸 링크를 클릭하는 경우, 공격자가 해당 쇼핑몰 사이트에서 배송지를 변경하는 javascript 코드를 심어놓았다면 서버는 사용자의 토큰과 이 코드를 신뢰하여 공격자의 의도대로 배송지를 변경해버리게 된다. 즉, 사용자의 의도와는 무관하게 서버에 요청을 하는 공격 방식을 말한다. 이를 방지하기 위해서 서버는 사용자의 요청 시마다 난수로 생성되는 CSRF Token을 발행한다. 이 토큰은 페이지에 hidden 객체로 들어가게 된다. 그리고 요청시마다 서버에 보내어 토큰의 일치 여부를 서버에서 판단하기 때문에, 공격자가 사용자의 세션 정보를 갖고 있다하더..
[스프링 시큐리티] 7. 예외처리 : ExceptionTranslationFilter, 요청 캐시 필터 : RequestCacheAwareFilter 1. ExceptionTranslationFilter ExceptionTranslationFilter는 예외처리용 필터이다. 로그인 시 다뤄지는 예외는 크게 2가지로 구분할 수 있다. AuthenticationException : 인증 예외 처리 AuthenticationEntryPoint 호출 인증이 실패했을 때 어떻게 handling 할지를 결정한다. 로그인 페이지로 리다이렉트, 401 HttpStatusCode 전달 등의 작업을 수행할 수 있다. 다음 장 코드 실습에서 직접 해본다. RequestCache와 SavedRequest 로그인 전에 어떤 url로 접속했는데 인증이 안되어서 로그인 페이지로 가는 경우, 사용자가 접근한 정보를 RequestCache와 SavedRequest 내에 담아두었다가..