본문 바로가기

개발/Spring36

Spring MVC 구현 1. 프로젝트 설정 Build : Gradle Language : Java Spring Boot : 3.2.3 Pakaging : Jar Java : 17 Dependency : Spring Web, Thymeleaf, Lombok UI : Bootstrap 2. 요구사항 분석 상품 도메인 모델 상품 ID 상품명 가격 수량 상품 관리 기능 상품 목록 상품 상세 상품 등록 상품 수정 Usecase Diagram 3. 상품 도메인 개발 Item @Data // 롬복의 @Data 어노테이션 추가 public class Item { private Long id; // id 필드 추가 private String itemName; // 상품명 private Integer price; // 가격 private Int.. 2024. 3. 2.
JWT(Json Web Token) 토큰으로 인증 세션의 장단점 장점 JSESSIONID는 유의미한 값이 아니라 서버에서 세션(사용자) 정보를 찾는 Key로만 활용 탈취되었다고 해서 개인정보가 탈취된건 아니다. 세션 하이재킹 공겨을 당할 수도 있기 때문에 절대적으로 안전 한 것은 아니다. 단점 서버에 세션(사용자) 정보를 저장할 공간이 필요하다. 서비스를 이용하는 사용자가 많다면 저장할 공간도 더 많이 필요하다. 분산 서버에서는 세션을 공유하는데 어려움이 있다. 세션 서버를 따로 두거나 공유하는 방법으로 해결 세션의 단점을 해결하기 위해서 토큰으로 인증하는 방법을 사용 유저가 로그인을 하면 서버에서는 토큰을 생성한 뒤에 저장하지 않고 (stateless) 토큰값을 내려준다. 토큰 값을 유저가 게시글 조회 요청을 할 때 함께 보내고 서버2(.. 2024. 3. 1.
Spring Security Config Spring Security Config 설정 필터 Off Spring Security 의 특정 필터를 disable하여 동작하지 않게 합니다. // Basic Authentication을 비활성화합니다. http.httpBasic().disable(); 로그인, 로그아웃 페이지 관련 기능 폼 로그인의 로그인 페이지를 지정하고 로그인에 성공했을 때 이동하는 URL 지정 // 로그인 페이지 및 성공 후 이동할 URL을 설정합니다. http.formLogin() .loginPage("/login") .defaultSuccessUrl("/") .permitAll(); // 모든 사용자에게 로그인 페이지를 허용합니다. 로그아웃 URL을 지정하고 로그아웃에 성공했을때 이동하는 URL을 지정 // 로그아웃을 처리하.. 2024. 3. 1.
Spring security Architecture, Filter 내부 구조 SecurityContextHolder -> SecurityContext -> Authentication -> Principal & GrantAuthority SecurityContextHolder SecurityContext를 제공하는 static 메소드(getContext)를 지원 SecurityContext 접근 주체와 인증에 대한 정보(Authentication)를 담고 있는 Context SecurityContext securityContext = SecurityContextHolder.getContext(); principal에는 유저 정보 저장 Authentication Principal, GrantAuthority 제공 인증이 이루어지면 해당 Authentication을 저장 P.. 2024. 2. 29.
Spring security Test Spring security Test SpringSecurity의 테스트에서는 User가 로그인한 상태를 가정하고 테스트해야 하는 경우가 많다. 인증을 받지 않은 상태로 테스트를 하면 SpringSecurity에서 요청 자체를 막기 때문에 테스트가 제대로 동작조차 하지 못하기 때문에 spring-security-test를 사용해서 해결 Spring-security-test를 사용하면 테스트 직전에 Mock User를 인증시켜놓고 테스트를 구동시킬수 있다. 의존성 추가 testImplementation 'org.springframework.security:spring-security-test' mockMVC Test 실행 전 MockMvc에 springSecurity (static 메소드)를 설정 @Bef.. 2024. 2. 28.
Spring Security 구현 개인 보안 노트 서비스 요구사항 1. 유저는 본인의 노트(게시글)만 저장하고 삭제하고 볼 수 있다. 2. 다른 유저의 노트는 볼 수 없다. 3. 어드민은 관리 차원에서 유저들의 노트 제목 리스트는 볼 수 있지만 내용은 볼 수 없다. 4. 어드민은 공지사항을 작성 할 수 있고 일반 유저들은 이 공지사항을 볼 수 있다. 기술 스택 1. Spring WebMVC 2. Spring Security 3. Thymeleaf 4. Lombok 5. Spring Jpa 6. H2 database 7. Gradle 오류 리포트 java: variable em might not have been initialized user/UserService private final UserRepository userRepositor.. 2024. 2. 27.
Spring Security Spring Security Web 기반 Application에 보안적인 제한을 추가하기 위해 사용하는 Security Framework rest api endpoint, mvc url, 정적 리소스와 같은 리소스들에 접근하려는 요청의 인증을 위해 사용 인증(Authentication) 사용자가 누구인지 확인하는 절차 로그인 인가(Authorization) 인증 이후에 리소스에 대한 권한 통제 클라이언트가 요청한 작업이 허가된 작업인지 확인하는 절차 2024. 2. 27.
Querydsl Querydsl 자바 코드(엔티티)로 부터 DB 쿼리를 생성하는 도구 HQL 생성 라이브러리 type-safety가 부족한 HQL의 대안 읽기 어려운 Criteria API의 대안 join에 편리하다. 커스텀 key-join 스프링 Pageable, JPA Repository interface 매끄러운 연동이 가능하다. Spring Data JPA와 조합하여 보다 복잡한 쿼리를 type-safe 하게 작성 가능하다. // EventRepositoryCustom public interface EventRepositoryCustom { Page findEventViewPageBySearchParams( String placeName, String eventName, EventStatus eventStatus.. 2024. 2. 27.