Spring 22

Spring ) SpringBoot로 SpringSecurity 기반의 JWT 토큰 구현하기

현대 웹서비스에서는 토큰을 사용하여 사용자들의 인증 작업을 처리하는 것이 가장 좋은 방법이다. 이번에는 토큰 기반의 인증 시스템에서 주로 사용하는 JWT(Json Web Token)에 대해 SpringBoot와 Spring Security 기반으로 직접 제작해보도록 하겠다. 1. Spring Security 처리 과정 Spring Security 아키텍쳐는 위와 같으며 각각의 처리 과정에 대해서 자세히 알아보도록 하자.(아래에서 설명하는 내용은 Json Web Token을 활용한 Spring Security의 구현 방식으로, Session과 Token 기반의 차이점에 대해서는 여기를 참고하시고, Form을 활용한 Session기반의 구현 방식이 궁금하시다면 여기를 참고해주세요!) [ 0. 사전 세팅 ] ..

Spring 2023.09.05

Spring ) Spring Security 에 @AuthenticationPrincipal 사용시 예제

1. 개요 @AuthenticationPrincipal 어노테이션은 Spring Security를 사용할 때 현재 인증된 사용자의 정보를 가져오는 데 사용된다. 이를 활용하여 Controller 및 ServiceImpl 클래스에서 현재 인증된 사용자의 정보를 가져오는 부분을 변경하고자 함. 먼저, Controller에 해당 어노테이션을 추가하여 UserDetails를 가져온 후, ServiceImpl에 필요한 사용자 정보를 파라미터로 전달한다. 2-1. RecordController 변경 전 // class,class 위 어노테이션 생략 private final RecordService recordService; @PostMapping public ResponseEntity recordTime(@Requ..

Spring 2023.09.05

Spring ) Blacklist

1.JwtUtil.java // 토큰 블랙리스트 : 사용된 토큰을 사용하지 못하게 저장하여 관리함 @Autowired private TokenBlacklistRepository tokenBlacklistRepository; // 블랙리스트에 토큰이 있는지 확인, 존재하면 != null 즉 true 반환 public boolean isTokenBlacklisted(String tokenValue) { TokenBlacklist tokenBlacklist = tokenBlacklistRepository.findByToken(tokenValue).orElse(null); return tokenBlacklist != null; } 2.JwtAuthorizationFilter @Override protected ..

Spring 2023.07.19

Spring ) Spring Security 구현 순서

0. security 추가 1. Config > WebSecurityConfig 생성, 설정 우리가 직접 Filter를 구현해서 URL 요청에 따른 인가를 설정한다면 코드가 매우 복잡해지고 유지보수 비용이 많이 들 수 있습니다. Spring Security를 사용하면 이러한 인가 처리가 굉장히 편해집니다. 2. UserDetailsServiceImpl 구현 3. UserDetails 구현 UserDetailsService와 UserDetails를 직접 구현해서 사용하게 되면 Security의 default 로그인 기능을 사용하지 않겠다는 설정이 되어 Security의 password를 더 이상 제공하지 않는 것을 확인할 수 있습니다. POST "/api/user/login" 을 로그인 인증 URL로 설정..

Spring 2023.07.19

Spring ) Java Spring @Override annotation 이란? @Override 사용법

Java Spring 프레임워크에서 @Override 어노테이션은 메서드 재정의(Overriding)를 명시적으로 선언하는 데 사용됩니다. 메서드 재정의는 상위 클래스(부모 클래스)에 이미 정의된 메서드를 하위 클래스(자식 클래스)에서 다시 정의하여 동일한 메서드 시그니처(메서드 이름, 매개변수, 반환 타입)를 가진 새로운 구현을 제공하는 것을 말합니다. Java에서는 상속을 통해 클래스 계층 구조를 형성할 수 있습니다. 상위 클래스에는 기본적인 동작이 정의되어 있으며, 하위 클래스는 상위 클래스의 메서드를 재정의하여 필요한 동작을 변경하거나 추가할 수 있습니다. @Override 어노테이션은 다음과 같은 목적을 가지고 사용됩니다: 문법적 오류 방지: 상위 클래스에 해당 메서드가 존재하지 않거나 시그니처..

Spring 2023.07.19

Spring ) @Id, @Column, @GeneratedValue, @Entity, @Table

JPA로 코드를 작성하며 자주 나오고 가장 기본적인 어노테이션들이다. 따라서 이 어노테이션들을 정리하려고 한다. 👀 @Entity @Entity 어노테이션은 테이블과 매핑을 해주는 어노테이션으로, @Entity가 붙은 클래스는 JPA가 관리한다. @Entity 어노테이션의 속성에는 name이 있다. name의 속성에서는 JPA에서 사용할 엔티티 이름을 지정한다. 보통은 기본값인 클래스명을 사용한다. 주의 사항 - 기본 생성자는 필수이다. - JPA가 엔티티 객체 생성 시 기본 생성자를 이용한다. final 클래스, enum, interface, inner class에는 사용 불가 final 필드 불가 📖 @Table 엔티티와 매핑할 테이블을 지정한다. 생략 시 매핑한 엔티티 이름을 테이블명으로 사용한다...

Spring 2023.07.14

Spring ) DI, IoC 정리

🌱DI(Dependency Injection) DI(Dependency Injection)란 스프링이 다른 프레임워크와 차별화되어 제공하는 의존 관계 주입 기능으로, 객체를 직접 생성하는 게 아니라 외부에서 생성한 후 주입 시켜주는 방식이다. DI(의존성 주입)를 통해서 모듈 간의 결합도가 낮아지고 유연성이 높아진다. 첫번째 방법은 A객체가 B와 C객체를 New 생성자를 통해서 직접 생성하는 방법이고, 두번째 방법은 외부에서 생성 된 객체를 setter()를 통해 사용하는 방법이다. 이러한 두번째 방식이 의존성 주입의 예시인데, A 객체에서 B, C객체를 사용(의존)할 때 A 객체에서 직접 생성 하는 것이 아니라 외부(IOC컨테이너)에서 생성된 B, C객체를 조립(주입)시켜 setter 혹은 생성자를 통..

Spring 2023.07.14

Spring ) AOP (Aspect Oriented Programming)란?

AOP (Aspect Oriented Programming)란? AOP는 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이라고 불린다. 관점 지향은 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 모듈화 하겠다는 것이다. *모듈화 : 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것 예를 들어 핵심적인 관점은 비즈니스 로직이 될 수 있고, 부가적인 관점은 핵심 로직을 실행하기 위해 행해지는 데이터베이스 연결, 로깅, 파일 입출력 등이 될 수 있다. AOP는 흩어진 관심사(Crosscutting Concerns)를 모듈화 할 수 있는 프로그래밍 기법이다 [그림 1] AOP 예시 [그림 1]과 같이 클래스 A, B, C에서 공통적으로..

Spring 2023.07.13

Spring ) AOP

참조 : https://teamsparta.notion.site/Spring-Master-5-3ecdf6efc104448da71957aa031e914c#2dfed4b7846f4f07a07e4d9716b3b87a Spring AOP란 무엇일까? AOP는 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이라고 불린다. 관점 지향은 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 모듈화 하겠다는 것이다. Spring의 AOP 애너테이션 Spring의 AOP 애너테이션 @Aspect Spring 빈(Bean) 클래스에만 적용 가능합니다. 어드바이스 종류 @Around: '핵심기능' 수행 전과 후 (@Before + @After) @Befor..

Spring 2023.07.13