전체 글153 [Spring Security] CSRF CSRF (Cross Site Request Forgery) CSRF 공격은 웹 어플리케이션 취약점 중 하나로 인터넷 사용자(희생자)가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 만드는 공격입니다. 쇼핑몰이 있습니다. 공격자, 사용자(피해자), 서버 이렇게 있습니다. 이때 사용자(피해자)가 로그인 되어있습니다. 공격자가 사용자에게 링크를 보내서 사용자가 클랙한다면 공격자용 홈페이지에 접속하게 됩니다. 예를 들면 공격자용 코드는 다음과 같습니다. 이런식으로 광고같은 거를 누르면 사용자가 공격용 페이지가 열리면서 사용자의 승인 없이 배송지같은게 등록됨으로써 공격이 완료 됩니다. 그래서 스프링 시큐리티는 CsrfFilter라는 필터를 만들어서 이것을 방지.. Spring Boot/Spring Security 2022. 6. 29. [Spring Security] 예외 처리 및 요청 캐시 필터 ExceptionTranslationFilter ExceptionTranslationFilter는 두 가지 종류의 예외를 처리한다. FilterSecurityinterceptor 필터가 맨 마지막 필터인데 이 필터 바로 앞에 위치한 필터가 ExceptionTranslationFilter입니다. ExceptionTranslationFilter 가 실행될 때 try catch로 FilterSecurityinterceptor를 호출하고 있습니다. AuthenticationException : 인증 예외 처리 1. AuthenticationEntryPoint 호출 • 로그인 페이지 이동, 401 오류 코드 전달 등 --사용자에게 인증 예외가 발생했기 때문에 다시금 인증을 할 수 있게 처리한다. --개발자가 구현.. Spring Boot/Spring Security 2022. 6. 29. [Spring Security] 권한 설정 권한 설정 권한 설정은 선언적 방식과 동적 방식으로 나뉜다 선언적 방식 선언적방식은 URL과 Method로 나뉜다. • URL - http.antMatchers("/users/**"). hasRole(“USER") • Method - @PreAuthorize(“hasRole(‘USER’)”) public void user(){ System.out.println(“user”)} 동적 방식 – DB 연동 프로그래밍 • URL • Method 지금은 선언적 방식의 URL방식을 다뤄 보겠습니다. 적용 @Override protected void configure(HttpSecurity http) throws Exception { http .antMatcher(“/shop/**”) .authorizeRequest.. Spring Boot/Spring Security 2022. 6. 29. [Spring Security] 동시 세션제어, 세션 고정 보호, 세션정책 동시 세션 제어 동시 세션 제어는 동일한 계정으로 인증을 받을 때 즉, 로그인을 했을 때 생성되는 세션에 대해서 최대 세션 허용 개수를 초과했을 때 어떻게 그 세션 개수를 초과하지 않고 유지할 수 있는지에 대한 것이다. 예를 들어 서버에서 설정한 동일한 계정에 대한 세션 최대 개수가 1개라고 하면, 웹에서 로그인을 하면 세션이 1개가 생성된다. 그리고 모바일에서도 똑같은 계정으로 로그인했을 때는 세션이 2개가 된다. 이 상황에 대해서 허용 세션은 1개인데 나머지 1개를 어떻게 처리할지에 대해서 처리하는 것을 동시 세션 제어를 통해 설정할 수 있습니다. 스프링 시큐리티는 밑의 그림과 같이 두 가지 전략으로 동시 세션 제어를 제공하고 있습니다. 동일 한계정으로 허용되는 세션 개수는 1개로 가정합니다. 1. .. Spring Boot/Spring Security 2022. 6. 29. [Spring Security] Remember Me 인증, RememberMeAuthenticationFilter Remember Me 인증 우리가 일반적인 웹 애플리케이션에 접속할 때 로그인 유지하기가 있을 것이다. 그 기능은 쿠키로 구현하는것인데. 스프링 시큐리티에서는 이 기능 또한 제공하고 있다. Remember me 적용하기 protected void configure(HttpSecurity http) throws Exception { http.rememberMe() .rememberMeParameter(“remember”) // 기본 파라미터명은 remember-me .tokenValiditySeconds(3600) // Default 는 14일 .alwaysRemember(true) // 리멤버 미 기능이 활성화되지 않아도 항상 실행 .userDetailsService(userDetailsService) .. Spring Boot/Spring Security 2022. 6. 29. [Spring Security] Logout처리, LogoutFilter Logout 처리 클라이언트가 로그아웃 요청을 보내면 request(/logout) 스프링 시큐리티가 그 요청을 받고 로그아웃처리를 합니다 로그아웃 처리는 세션을 무효화하고, 인증 토큰 삭제(Security Context 삭제) , 쿠키 정보 삭제, 로그아웃이 성공하면 로그인 페이지로 이동하도록 처리하고 있습니다. 로그아웃을 하려면 다음과 같은 api를 사용해야 합니다. protected void configure(HttpSecurity http) throws Exception { http.logout() // 로그아웃 처리 .logoutUrl("/logout") // 로그아웃 처리 URL .logoutSuccessUrl("/login") // 로그아웃 성공 후 이동페이지 .deleteCookies("J.. Spring Boot/Spring Security 2022. 6. 29. [Spring Security] Form Login 인증 필터 UsernamePasswordQuthenticationFilter UsernamePasswordAuthenticationFilter는 사용자 form 인증처리를 하는 필터입니다. 인증 전에는 정보를 담아서 매니저에게 넘기는 역할을 하고 인증이 성공한 후에는 시큐리티 콘텍스트에 넘기는 역할을 합니다. 사용자가 요청을하면 UsernamePasswordAuthenticationFilter가 인증처리를 합니다. 사용자가 인증을 시도하면 필터가 요청 URL을 확인을 합니다. 현재 요청이 AntPathRequestMatcher를 통해 /login인지 확인을 합니다. 매칭이 되면 로그인 처리를 하는 것이고 아니면 필터로 이동을 합니다. 참고로 이 url은 사용자 정의 보안 기능을 구현할 때 loginProcessin.. Spring Boot/Spring Security 2022. 6. 29. [Spring Security] Form Login 인증 SecurityCong http .authorizeRequests() .anyRequest().authenticated();//모든 곳에 인증해야함 http .formLogin() .loginPage("/loginPage") //로그인커스텀 페이지 기본은 security가 제공하는 /login으로 이동한다. .defaultSuccessUrl("/") //성공했을때의 이동 페이지 .failureUrl("/login") //실패시 돌아갈 URL .usernameParameter("userId") .passwordParameter("passwd") .loginProcessingUrl("/login_proc") //로그인읋 할때 전송되는 URL .successHandler(new AuthenticationSuc.. Spring Boot/Spring Security 2022. 6. 29. [Spring Boot] Bean Validation 지금부터 Validation에 대해 알아보겠습니다. 우리가 회원가입을 한다고 했을때 많은 항목중에서 하나를 잘못입력하면 일반적인 웹 애플리케이션이면 어떤것이 잘못되었는지 알려줍니다. 만약 알려주지않고 에러페이지가 나오면 가입하다말고 짜증나서 회원가입을 안하는 경우가 생길 수 도 있습니다. 이를 방지하기 위해 검증처리로직을 Validation이라는것으로 할 수 있습니다. Bean Validation 스프링의 기본적인 validation인 Bean Validation은 클래스의 필드에 특정 annotation을 적용하여 필드가 갖는 제약 조건을 정의하는 구조로 이루어진 검증?, 검사 입니다. validator가 비즈니스로직이 아니라 그 객체 필드에 대한 유효성 검사를 해줍니다. Validation 적용 하기.. Spring Boot 2022. 6. 28. [Spring Boot] 메세지, 국제화 관리 기능 메세지 관리 HTML 화면 에서 예를들어 쇼핑몰이라고 가정했을때 상품명이라는 메세지가있다. 근데 기획자가 이걸 전부다 상품 이름으로 변경해달라고했을때 적게는 몇개에서 많게는 수백개까지의 화면의 상품명이라고 써있는 곳을 찾아서 상품이름으로 바꿀려고생각하면 물론 replaceall해서 바꿀수도있지만 귀찮은 일이고 잘못들어가서 화면이 랜더링 안 될수도있다. 그래서 스프링에서는 이 메세지를 관리 할 수 있게 키, 벨류 형식으로 관리 할 수 있게 제공한다. 지금부터 메세지 관리 기능에 대해서 알아보겠습니다. 직접등록 package hello.itemservice; import org.springframework.boot.SpringApplication; import org.springframework.boot.a.. Spring Boot 2022. 6. 28. [Spring Boot] @Transactional @Transactional(readOnly = true) 이렇게 클래스위에 적어주면 읽기전용이 된다. 조회하는데 성능이 더 좋다. default 값은 false이다. 클래스위에 적어주면 메서드들은 다 true값으로 되므로 메서드 위에 @Transactional 을 적어주면 우선순위가 적용되어 insert, delete, update를 다 할 수있다. Spring Boot/어노테이션 2022. 6. 27. [Spring Boot] @PostConstruct 1. @PostConstruct란? @PostConstruct는 의존성 주입이 이루어진 후 초기화를 수행하는 메서드이다. @PostConstruct가 붙은 메서드는 클래스가 service(로직을 탈 때? 로 생각 됨)를 수행하기 전에 발생한다. 이 메서드는 다른 리소스에서 호출되지 않는다해도 수행된다. 2. 왜 사용하는가(장점)? 1) 생성자(일반)가 호출 되었을 때, 빈(bean)은 아직 초기화 되지 않았다. (예를 들어, 주입된 의존성이 없음) 하지만, @PostConstruct를 사용하면, 빈(bean)이 초기화 됨과 동시에 의존성을 확인할 수 있다. 2) bean lifecycle에서 오직 한 번만 수행된다는 것을 보장할 수 있다. 그래서 @PostConstruct를 사용하면 bean이 여러번 초.. Spring Boot/어노테이션 2022. 6. 27. 이전 1 ··· 7 8 9 10 11 12 13 다음