반응형
package newCar.event_page.jwt;
import newCar.event_page.model.entity.Team;
public interface JwtTokenProvider {
public String generateToken(String username, boolean isAdmin);
public Long getUserId(String token); //토큰에서 유저 Id를 추출
public Team getTeam(String token); //토큰에서 유저 Team을 추출
public boolean validateToken(String token); //JWT 토큰 유효성 검증
public boolean validateAdminToken(String token);//JWT 토큰이 admin의 역할을 담고 있는지 검증
}
@Component
@RequiredArgsConstructor
public class UserTokenInterceptor implements HandlerInterceptor {
private final JwtTokenProvider jwtTokenProvider;
}
이런식으로 JwtTokenProvider라는 인터페이스가 존재할 때 , 구현체가 1개라면 당연히 그 구현체를 주입받겠지만, 구현체가 여러개일 때는 어떨까?
만약 JwtTokenProvider 인터페이스를 구현한 클래스가 여러 개 있다면, Spring은 어떤 구현체를 주입할지 결정하지 못해 **NoUniqueBeanDefinitionException**을 발생시킨다.
4.1 @Primary 어노테이션 사용
- 여러 구현체 중 하나에 @Primary 어노테이션을 붙이면 Spring이 기본적으로 그 구현체를 주입합니다.
@Component
@Primary
public class PrimaryJwtTokenProviderImpl implements JwtTokenProvider {
// 이 구현체가 기본적으로 주입됩니다.
}
4.2 @Qualifier 어노테이션 사용
- 주입받을 때 특정 구현체를 지정할 수 있습니다.
@Component
@RequiredArgsConstructor
public class UserTokenInterceptor implements HandlerInterceptor {
private final JwtTokenProvider jwtTokenProvider;
// 생성자 주입 시 @Qualifier 사용
public UserTokenInterceptor(@Qualifier("specificJwtTokenProviderImpl") JwtTokenProvider jwtTokenProvider) {
this.jwtTokenProvider = jwtTokenProvider;
}
}
또는 필드 주입 시:
@Component
public class UserTokenInterceptor implements HandlerInterceptor {
@Qualifier("specificJwtTokenProviderImpl")
@Autowired
private JwtTokenProvider jwtTokenProvider;
}
반응형
'Spring boot' 카테고리의 다른 글
Jmeter 꿀팁 (0) | 2024.08.20 |
---|---|
Jmeter 사용법!! (Mac OS brew로 설치) (0) | 2024.08.20 |
JWT 이란? (0) | 2024.08.10 |
RedisTemplate.opsForValue().decremet() (0) | 2024.08.06 |
Spring Redis 분산 락 사용법 (0) | 2024.08.05 |