인증에 대한 전반적인 처리과정 흐름을 이해해보자 클라이언트가 로그인을 요청한다. 폼 인증방식으로 요청할 때 UsernamePasswordAuthenticationFilter가 작동한다. 사용자의 id와 password를 받아서 Authentication 객체에 담는다. id와 password를 담은 인증 전 토큰 객체를 생성해서 AuthenticationManager에게 인증을 맡긴다. AuthenticationManager가 필터로 부터 받은 인증객체를 전달받는다. AuthenticationManager의 역할은 인증의 전반적인 관리를 하는데 실제로 인증 역할을 하지 않고 적절한 AuthenticationProvider에 위임한다. AuthenticationManager가 사용자의 현재 id , pas..
SecurityContextPersistenceFilter SecurityContext 객체의 생성과 저장 조회를 하는 역할을 한다. FilterChainProxy 에서 두 번째에 위치하고 있다. 나머지 필터들이 참조해서 사용하기 때문이다! 익명 사용자 새로운 SecurityContext 객체를 생성하여 SecurityContextHolder에 저장 AnonymousAuthenticationFilter 에서 AnonymousAuthenticationToken 객체를 SecurityContext에 저장 인증 시 새로운 SecurityContext 객체를 생성하여 SecurityContextHolder에 저장 UsernamePasswordAuthenticationFilter 에서 인증 성공 후 Securit..
인증 저장소 SecurityContext Authentication 객체가 저장되는 보관소로 필요 시 언제든지 Authentication 객체를 꺼내어 쓸 수 있도록 제공되는 클래스 ThreadLocal에 저장되어 아무 곳에서나 참조가 가능하도록 설계함. 인증이 완료되면 HttpSession에 저장되어 어플리케이션 전반에 걸쳐 전역적인 참조가 가능하다. SecurityContextHolder 인증된 사용자 정보를 담는 그릇? 이라고 생각하는게 좋을 것 같다. ScurityContext 객체 저장 방식 MODE_THREADLOCAL: 스레드 당 SecurityContext 객체를 할당, 기본값 MODE_INHERITABLETHREADLOCAL: 메인 스레드와 자식 스레드에 관하여 동일한 SecurityCo..
Authentication Authentication이란 인증 주체이다. 당신이 누구인지 증명하는 것! 사용자의 인증정보를 저장하는 토큰 개념 인증 시 id와 password를 담고 인증 검증을 위해 전달되어 사용된다. 인증 후 최종 인증 결과 (user 객체, 권한정보)를 담고 SecurityContext에 저장되어 전역적으로 참조가 가능) Authentication authentication = SecurityContextHolder.getContext().getAuthentication() Authentication 객체의 구조 1) principal: 사용자 ID 혹은 User 객체를 저장 2) credentials: 사용자 비밀번호 3) authorities: 인증된 사용자의 권한 목록 4) d..
스프링 시큐리티 설정클래스가 여러 개 있을 경우 설정 클래스별로 보안작동이 각각 작용하게 된다. 설정클래스 별로 보안 기능이 각각 작동 설정클래스 별로 RequestMathcer 설정 http.antMatcher("/admin/**") 설정클래스 별로 필터가 생성 FilterChainProxy가 각 필터들을 가지고 있다. 요청에 따라 RequestMatcher와 매칭되는 필터가 작동된다. 1. GET방식으로 /admin 주소로 자원 요청 2. FilterChainProxy에서 요청을 받아 요청을 처리할 필터를 선택 3. 요청 URL과 matches를 하여 true가되는 Filter를 선택해야 한다. => FilterChainProxy가 저장하고 있는 각각의 SecurityConfig 객체들에서 Reque..
기존 맥 os 업데이트 이후 jdbc connection locale 에러가 나오면 시스템 환경설정 > 언어및지역 > 지역 지역을 대한민국에서 미국으로 변경한뒤에 다시 대한민국으로 변경하면 됐지만 ventura 부터는 버그인지 아직은 안된다고함. java 환경이면 jvm 옵션에 -Duser.language=kr -Duser.country=KO 추가 메이븐 환경이면 .... -Duser.language=ko ... 출처 (참고문헌) https://stackoverflow.com/questions/51431497/cant-connect-to-oracle-database-with-intellij-locale-not-recognized https://www.clien.net/service/board/cm_mac..
브라우저에서 사용자의 요청이 있을 때 서블릿 컨테이너부터 스프링 컨테이너까지 처음부터 끝까지 요청과 응답에는 Servlet Filter를 거치게 된다. 서블릿 컨테이너에서는 FilterChain을 통해서 등록된 필터를 계속 거쳐가는 것이다. public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) { // do something before the rest of the application chain.doFilter(request, response); // invoke the rest of the application // do something after the rest of the applicati..
Form 인증 - CSRF (사이트 간 요청 위조) 2008년도에 있었던 옥션 해킹 사고도 CSRF로 공격을 했다고 한다. (해커가 옥션 운영자에게 CSRF 코드가 포함된 이메일을 보내서 관리자 권한을 얻어냈다) .. .. 옥션 관리자가 관리 권한을 가지고(이미 유효한 쿠키 발급된 상태로) 메일을 조회합니다. 해커는 위와 같이 태그가 들어간 코드가 담긴 이메일을 보낸다. 단, 관리자는 이미지 크기가 0이므로 이미지가 있는지 눈치를 채지 못합니다. 관리자가 메일을 열면 이미지 파일을 받아오기 위해 URL이 열리게 됩니다. 그렇게 되면 해커가 원하는 대로 관리자의 계정이 id와 pw 모두 admin인 계정으로 변경된다고 합니다. 다른 예시 취약한 웹사이트에서 쿠키를 보유중인 사용자가 트리거 행위를 합니다. ..
- Total
- Today
- Yesterday
- springboot
- docker
- 오라클
- Kotlin
- 프로페셔널 스튜던트
- Java
- Bash tab
- oracle
- JavaScript
- input
- maven
- localtime
- Github Status
- jQuery
- svn
- Linux
- Spring Security
- LocalDateTime
- window
- config-location
- LocalDate
- mybatis config
- Spring
- intellij
- 베리 심플
- 북리뷰
- elasticsearch
- Mac
- rocky
- mybatis
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |