전체 글 127

Spring Security 로그인 동작 흐름

요약 로그인 요청이 오면 필터가 가로채서 username,password를 확인하여 세션에 있는 SecurityContextHolder 안에 있는 SecurityContext에 Authentication 객체( user 오브젝트 역할) 를 저장한다. Authentication객체는 AuthenticationManager가 만들어준다. 자세한 과정 - username,password를 가지고 로그인 요청이 왔을 때 AuthenticationFilter가 가로채서 usernamePasswordAuthenticationToken을 만들어준다. - AuthenticationManager이 usernamePasswordAuthenticationToken을 받아서 Authentication ( session )을 ..

SpringBoot, JPA - '톰캣 시작' 및 'http request 요청' 흐름

1. 톰켓 시작 2. 필터, 디스패처, DataSource, 세션, 인터셉터, viewResolver 를 메모리에 띄운다 3. 서버에 http 요청이 오면 디스패처가 http 요청을 받아 해당하는 url이 맵핑된 컨트롤러를 메모리에 띄우고 http body에 있는 데이터를 컨트롤러에서 사용할 수 있게 해준다. 컨트롤러에서 db session이 시작된다. [로그인 요청] 4.서버 내부 로직에 의해 service단까지 가서 JPA Repository를 통해 영속성 컨텍스트에 해당 오브젝트(user)가 존재하는지 조회한다. 1) 없으면 DB에 쿼리를 날려서 받은 데이터를 영속성컨텍스트에 저장하고 service단으로 가져온다. 2) 있으면 바로 service 단까지 데이터를 가져온다. 5. service단에서 ..

Spring Security 사용하기

필요한 의존성 org.springframework.security spring-security-taglibs org.springframework.boot spring-boot-starter-security 스프링 시큐리티 로그인 localhost의 어느 url로 요청하든지 spring security가 가로채서 로그인창이 있는 화면을 띄운다. id는 user password는 spring security가 만든 password를 사용한다. spring을 run하면 log에 패스워드를 보여준다. Using generated security password: ㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁ This generated password is for development use only. Your security..

정규식

참고 [Regex] 정규표현식 특정 문자열 포함하지 않는 매칭 방법 (1004lucifer.blogspot.com) 특정문자 제외, 특정문자 포함 ^((?!import|package).)*blog.*$ import 또는 package로 시작하지 않고 blog를 포함하는 라인 [Regex] 정규표현식 특정 문자열 포함하지 않는 매칭 방법 특정 문자열이 들어있는 라인을 제외하고 어떻게 문자열을 추출할 수 있을까 하다가 알아보았다. 특정 문자열이 포함되지 않게 매칭하는 방법은 아래와 같다. 1004lucifer ^((?!단어).)*$ https://regexr.com/4fsa8 복수개의 단어에 대해서 문자열을 제외하고 싶다면 다음과 같이 할 수 있다. 1004lucifer ^((?!단어|단어).)*$ http..

영속성 컨텍스트와 OSIV

[JPA] 영속성 컨텍스트와 OSIV(Open Session In View) (tistory.com) [JPA] 영속성 컨텍스트와 OSIV(Open Session In View) 개요 JPA를 사용하면서 개발하다보면 간혹 LazyInitializationException 이라는 예외를 접하게 될 것이다. 이번에 포스팅할 OSIV는 해당 예외와 밀접한 관련이 있다. 또한 OSIV의 활성화 여부에 따라 JPA를 xzio.tistory.com 개요 JPA를 사용하면서 개발하다보면 간혹 LazyInitializationException 이라는 예외를 접하게 될 것이다. 이번에 포스팅할 OSIV는 해당 예외와 밀접한 관련이 있다. 또한 OSIV의 활성화 여부에 따라 JPA를 사용해서 개발하는 애플리케이션 성능에 ..

mysql 접속 오류(Public Key Retrieval is not allowed)

상황 dbeaver에서 mysql 접속이 잘 되다가 갑자기 안 됨 원인 이 전에는 주소값,데이터베이스,드라이버이름,유저아디디,패스워드 등만 가지고 젒고이 가능했다. MySQL 8.0 이후 접속 시에는 allowPublicKeyRetrieval=true 설정이 필요하다. 해결 jdbc에서는 jdbc:mysql://localhost:3306/database?allowPublicKeyRetrieval=true dbeaver에서는 connection settings - Driver properties : allowPublicKeyRetrieval=true

JPA 영속성 컨텍스트(Persistence Context)의 5가지 특징

JPA 영속성 컨텍스트(Persistence Context)의 5가지 특징 — devoong2 (tistory.com) 영속성 컨텍스트 특징 1차 캐시 변경 감지 (Dirty Checking) 동일성 보장 지연 로딩(Lazy Loading) 쓰기 지연 1차 캐시 영속성 컨텍스트 내부에서 엔티티를 캐시로 저장하는 것 일반적으로 @Transactional 어노테이션과 라이프사이클이 동일함 OSIV(Open Session In View) 가 true 라면 ServiceLayer 에서 @Transactional 이 종료되어도 PresentationLayer 까지도 1차 캐시는 유지됨 Jpa 는 데이터 조회시 캐시를 우선적으로 조회하고 캐시에 데이터가 없으면 DB를 조회함 @Transactional public ..