Programming-[Backend] (394) 썸네일형 리스트형 [스프링 시큐리티] 7. 예외처리 : ExceptionTranslationFilter, 요청 캐시 필터 : RequestCacheAwareFilter 1. ExceptionTranslationFilter ExceptionTranslationFilter는 예외처리용 필터이다. 로그인 시 다뤄지는 예외는 크게 2가지로 구분할 수 있다. AuthenticationException : 인증 예외 처리 AuthenticationEntryPoint 호출 인증이 실패했을 때 어떻게 handling 할지를 결정한다. 로그인 페이지로 리다이렉트, 401 HttpStatusCode 전달 등의 작업을 수행할 수 있다. 다음 장 코드 실습에서 직접 해본다. RequestCache와 SavedRequest 로그인 전에 어떤 url로 접속했는데 인증이 안되어서 로그인 페이지로 가는 경우, 사용자가 접근한 정보를 RequestCache와 SavedRequest 내에 담아두었다가.. [스프링 시큐리티] [작성중] 6. 권한 설정, 표현식 1. 권한 설정 권한 설정 방식 권한 설정은 2가지 방식을 통해 가능하다. 1. 선언적 방식 URL : http.antMatchers("/users/**").hasRole("USER") method : @PreAuthorize("hasRole('USER')") 2. 동적 방식 DB에 연동하여 URL이나 Method로 권한을 설정한다. 동적 방식은 나중에 다룰 실전 프로젝트에서 다루고, 일단은 선언적 방식에 대해서만 공부한다. 선언적 방식 대략 아래 코드와 같은 방식으로 설정해준다고 보면된다. .antMatchers() 메서드를 이용하는데 어떤 url에 대한 것인지, 그리고 chaining을 통해서 어떤 권한을 가진 사용자가 해당 url에 접근해줄 수 있는지를 설정해준다. 주의할 점은 하위 계층의 구체적인.. [스프링 시큐리티] [작성중] 5. 익명 사용자 인증 필터, 세션 제어 필터 1. AnonymousAuthenticationFilter 익명사용자도 Authentication 객체는 null이 아니다 앞서 대략적으로만 다뤘지만, 스프링 시큐리티는 인증이 됬다면 기본적으로 SecurityContextHolder 내부의 SecurityContext에 인증 정보가 담긴 Authentication 객체의 값이 존재해야하는 구조이다. 익명 사용자를 처리하는 필터는 AnonymousAuthenticationFilter이다. 이 필터는 Authentication의 값을 검사하고, 만약 사용자의 Authentication 정보가 아니라면, AnonymousAuthenticationToken을 생성하고 해당 토큰을 SecurityContext에 넣는다. 익명 사용자라 할지라도 Authentica.. [스프링 시큐리티] 4. Logout, Rember me 필터 1. logout API 로그아웃 API의 사용법은 아래 코드에서 확인할 수 있다. 메서드별 설명은 주석으로 표기했다. SecurityConfig.class http .logout() .logoutUrl("/logout") //logout url 설정 .logoutSuccessUrl("/login") //logout 시 이동할 url만 설정 .addLogoutHandler(new LogoutHandler() { //logout이 성공했을 때 처리할 내용 @Override public void logout(HttpServletRequest request, HttpServletResponse response, Authentication authentication) { HttpSession session = .. [스프링 시큐리티] 3. Form Login 인증 방식 파악 계속 : AuthenticationManager, Provider와 SecurityContext 1. 인증 로직 파악(계속) 이 부분도 FomrLogin의 인증 과정을 대략적으로 살펴본 내용일 뿐, 자세한 내용은 뒤에서 다루게 되므로 간단히 훑어보기만 하자. 1. 이어지는 과정과 Authentication 객체 지난 글에서 파악한 부분은 AntPathRequestMatcher까지였다. 서버에서 requestMap형태로 url과 권한 정보를 갖고 있고, 클라이언트가 요청한 url과 비교하는 부분이였다. 여기서 실패하면 chain.doFilter를 통해 다른 필터로 넘어가게 되지만, 일단 성공하게 되면 사용자의 입력 정보를 바탕으로 Authentication 객체를 생성하게 된다. 2. AuthenticationManager -> AuthenticationProvider 생성된 Authenticatio.. [스프링 시큐리티] 2. Form Login 인증 방식 파악 UsernamePasswordAuthenticationFilter, AnthPathRequestMatcher 1. Form Login formLogin의 API 살펴보기 http.formLogin() 으로 작동시킬 수 있다. 그리고 chaining 방식으로 아래와 같이 상황에 따른 페이지 설정을 해줄 수 있다. http.formLogin() .loginPage(“/login.html") // 사용자 정의 로그인 페이지 .defaultSuccessUrl("/home) // 로그인 성공 후 이동 페이지 .failureUrl("/login.html?error=true“) // 로그인 실패 후 이동 페이지 .usernameParameter("username") // 아이디 파라미터명 설정 .passwordParameter(“password”) // 패스워드 파라미터명 설정 .loginProcessingUrl(“/log.. [스프링 시큐리티] 1. 시작 : 프로젝트 생성, WebSecurityConfigurerAdapter - HttpSecurity 구조 이해하기 이 글의 시리즈는 "인프런 : 스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring security, 정수원님의 강의"를 요약한 것이다. 1. 프로젝트 생성 프로젝트 생성은 다음 그림과 같이 진행한다. dependency는 일단 spring web만 추가한다. src/main/java/io/security/basicsecurity/SecurityController.java 1 2 3 4 5 6 7 8 9 @RestController public class SecurityController { @GetMapping("/") public String index() { return "home"; } } Colored by Color Scripter cs 기본적으로 RestController로.. [작성중] 서비스 버스, jms 등 개요 jms는 자바에서 제공하는 메시징 서비스이다. 메시징 서비스는 서로 다른 네트워크를 갖는 서비스(애플리케이션)들간에 데이터를 비동기적으로 받을 수 있게 해준다. 다시 말해 서비스 1과 서비스 2 사이에 직접적인 통신이 일어나는 것이 아니라 서비스 1과 서비스 2 사이에 서비스 버스라고 하는 큐(Queue)가 있어서 서비스 1과 서비스 2 사이의 통신을 받아들이고 저장하는 역할을 한다. 서비스 1에서 특정 로직이 끝나고 서비스 버스로 완료된 데이터가 담겨있는 문자열을 보내면 서비스 버스에 해당 데이터가 '메시지(레터)'라는 이름으로 쌓이게 할 수 있다. 그럼 서비스 2가 서비스 버스에 접근해서 이 데이터를 확인하고 서비스 2의 특정 로직을 실행하거나 관련 데이터베이스에 정보를 저장할 수 있게 된다. .. 이전 1 ··· 28 29 30 31 32 33 34 ··· 50 다음