목록Spring (24)
seok의 패치노트

MockMvc 란? Controller를 호출해주는 도구로써 Junit 테스트 시 필요로 한다 만약 MockMvc 유틸리티 클래스를 사용하지 않는다면 Postman이나 직접 웹브라우저에서 테스트를 하며 디버깅을 해야 하지만 MockMvc를 사용하면 쉽게 테스트를 할 수 있다. MockMvc 테스트 방법 @WebMvcTest만 사용하는 방법이 있고 @SpringBootTest과 같이 사용하는 방식이 있다 @SpringBootTest를 사용하게 되면 ApplicationContext 전체를 불러오기에 Bean으로 등록된 모든 객체를 메모리에 미리 올려두고 테스트할 수 있다 만약 Bean을 미리 등록할 필요 없다면 @WebMvcTest 만 사용하면 되고 아니라면 @SpringBootTest와 @AutoConf..

해커가 인증된 클라이언트를 이용하여 자신의 url을 심어 접속을 유도하여 인증된 사용자가 가지고 있는 쿠키정보(세션ID등) 을 가지고 서버에 요청하여 계좌번호나 주민번호등 개인정보를 건들수 있게하는 공격방법이 있다. 이러한 공격 방법을 CSRF(사이트 간 요청위조) 공격이라고 한다!! 스프링 시큐리티 필터중에 CsrfFilter 는 이러한 csrf 공격을 방어해준다!! 사용자가 서버에 접속당시 인증토큰을 발급하여 서버가 하나 가지고 있고 하나는 클라이언트가 가지고 있게된다. 이후 클라이언트가 서버에 요청할때 발급받은 토큰을 가지고 계속해서 요청해야 csrfFilter를 정상적으로 통과할 수 있게된다!! 이렇게 되면 공격자 입장에서는 발급받은 토큰이 없기 때문에 요청시 가로막혀 Access Denied 같..

ExceptionTranslationFilter - 인증과 인가에 대한 예외를 처리하는 필터이다. - 시큐리티 필터중에 맨뒤에 있는 FilterSecurityInterceptor 바로앞에 존재한다. - 사용자에 요청을 받아 FilterSecurityInterceptor에게 전달해주기 위해 try~catch 로 감싸서 FilterSecurityInterceptor를 호출하여 전달한다. - FilterSecurityInterceptor에서 발생하는 인증,인가 예외는 자신을 호출한 ExceptionTranslationFilter에게 던진다. - FilterSecurityInterceptor가 던진 예외를 받아 AuthenticationException , AccessDeniedException 에 대해 처리하..

https://oneseok.tistory.com/74 [Security] 동시세션 제어 프로젝트를 하다보면 같은 유저에 대해 동시접속에 대한 고민을 하게된다. 동시접속이 가능하게 해줘야하나? 아니면 기기당 하나 ??.. 이것도 아니면 그냥 무조건 하나만 접속가능하게 해야하나 oneseok.tistory.com 시큐리티를 공부하면서 동시세션 제어를 어떻게 처리하는지 알아보는 시간이 있었다 이번시간에는 이 동시세션제어 가어떻게 이루어지는지 관련 필터에 대해 알아볼 것 이다. 관련 필터로는 SessionManagementFilter 와 ConcurrentSessionFilter 가 있다. ConcurrentSessionFiter - SessionManagementFilter 와 연계하여 동시세션 제어 역활을..

아래 사진과 같이 공격자가 우리에 was에 접근하게 되어 jsessionid를 가진 상태에서 클라이언트에게 자신의 jsessionid 를 몰래 넘겨 클라이언트가 인증처리를 한 후 부터는 공격자와 클라이언트가 같은 jsessionid를 가지고 세션을 공유하기에 공격자가 세션이 필요한 영역에 접근할 수 있는 문제가 있다. 이것을 "고정세션 공격" 이라고 하는데 스프링 시큐리티의 API를 활용하여 이 문제를 해결 할 것이다. 왼쪽이 사용자 , 오른쪽이 공격자라고 해보자 공격자가 사용자에게 자신의 jsessionid를 몰래 넣어 추후 사용자의 인증처리를 통해 공격자 자신도 리소스에 접근할 수 있게 해볼것이다. 공격자가 자신의 세션ID를 사용자에게 넣은 모습이다. 사용자가 인증을 끝마치고 공격자는 이제 자신도 세..

프로젝트를 하다보면 같은 유저에 대해 동시접속에 대한 고민을 하게된다. 동시접속이 가능하게 해줘야하나? 아니면 기기당 하나 ??.. 이것도 아니면 그냥 무조건 하나만 접속가능하게 해야하나 여러방법이 생각이들지만 구현하기가 굉장히 까다롭다 하지만 시큐리티를 사용하면 내가 굳이 구현안해도 API를 사용하여 구현할 수 있다!! maximumSessions의 경우 1로 설정되었기 때문에 같은 유저가 동시 접속시 하나는 익셉션이 발생하여 인증처리를 강제로 막게된다.

스프링 시큐리티 필터중에 AnonymouseFilter 라는 필터가 존재한다. 이 필터의 역활은 익명의 Guest 유저를 위한 인증 객체를 생성한다!!!... 보통 사용자 로그인 상태에 따라 세션영역에 user 객체를 넣어 view 단에서 session 안에 user가 NULL 인지 아닌지에 따라 로그인버튼을 로그아웃으로 바꾸고 특정메뉴를 숨기거나 보여주거나 했었다. 스프링 시큐리티에서는 NULL 이라는 개념을 사용하면 안된다 NULL을 사용하게 되면 시큐리티를 사용하는데 제약이 생긴다(곳곳에서 검증을 진행할 때 익셉션이 발생하게됨!!) 그래서 스프링 시큐리티를 사용할 때는 이런 익명객체를 만들어 인증처리는 일단 통과하게 한 후 Guest 유저에 대한 처리를 따로 해야한다. 스프링 시큐리티를 사용하여 이..

https://oneseok.tistory.com/71?category=933442 [Security] JWT - JWT를 이용한 인증처리 프로젝트2 https://oneseok.tistory.com/70 [Security] JWT - JWT를 이용한 인증처리 프로젝트1 지난 시간까지 이 프로젝트를 만들기 전에 이론적인 내용을 공부해 보았다. RSA를 통한 서명 처리나 HMAC을 이용한 인증처리 oneseok.tistory.com 지난 시간에는 회원가입 처리 및 로그인 관련 파일들을 만들었다. 하지만 formLogin 방식을 사용하고 있지 않기 때문에 "/login" 요청이 자동으로 활성화가 되지 않아 PrincipalDetailsService 가 동작하지 않고있다. 이번시간에는 PrincipalDeta..