스프링
-
UsernamePasswordAuthenticationFilter스프링 2023. 1. 19. 23:53
UsernamePasswordAuthenticationFilter UsernamePasswordAuthenticationFilter는 Form기반의 Authentication방식으로 인증을 진행할때 아이디, 패스워드 데이터를 파싱하여 인증 요청을 위임하는 filter이다. 유저가 로그인 창에서 로그인 시도를 할 때 보내는 요청에서 id와 pw를 가져와서 인증을 위한 토큰을 생성후 인증을 다른쪽에 위임하는 필터이다. Spring Boot 기반의 HttpSecurity를 설정하는 코드에서 http.formLogin(); 을 사용하면 시큐리티에서는 기본적으로 UsernamePasswordAuthenticationFilter 을 사용하게 된다. @Override protected void configure(Ht..
-
JWT 토큰 체크스프링 2023. 1. 19. 21:05
public boolean tokenValid(String token) { try { Jws claimsJws = Jwts.parserBuilder().setSigningKey(secretKey).build().parseClaimsJws(token); return true; } catch (Exception e) { return false; } } 토큰이 만료 되었는지 체크하는 로직이다. 토큰에서 헤더인 "AccessToken"를 뽑아낸 다음 유효하면 true를 리턴하고, 그렇지 않으면 false를 return하도록 한다. claim으로 변환도중 다음과 같은 예외가 발생한다. 1) ExpiredJwtException : JWT를 생성할 때 지정한 유효기간 초과할 때. 2) UnsupportedJwtExc..
-
OAuth2.0과 JWT적용 - 2스프링 2023. 1. 17. 19:29
토큰을 발급하고 검증 할 수 있는 컴포넌트를 작성한다. 토큰은 API서버에 접근하기 위한 인증 토큰과 인증 토큰이 만료되었을 경우 리프레쉬에 사용할 리프레쉬 토큰으로 이루어져 있다. @NoArgsConstructor @Getter public class Token { private String accessToken; private String refreshToken; public Token(String token, String refreshToken) { this.accessToken = token; this.refreshToken = refreshToken; } } 토큰을 발행해주는 tokenService를 구한다. @Service public class TokenService{ private Stri..
-
OAuth2.0과 JWT적용 - 1스프링 2023. 1. 17. 19:22
Security의 설정은 다음과 같이 하였다. @Configuration @EnableWebSecurity @RequiredArgsConstructor public class SecurityConfig { private final OAuthUserService oAuthUserService; private final OAuthSuccess oAuthSuccess; @Bean public PasswordEncoder passwordEncoder() { return PasswordEncoderFactories.createDelegatingPasswordEncoder(); } @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exce..
-
security버전스프링 2023. 1. 15. 15:45
WebSecurityConfigurerAdapter가 사용할 수 없게 되어 다음과 같은 방식을 사용해야 한다. @Configuration @EnableWebSecurity public class SecurityConfig{ @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http.csrf().disable(); http.authorizeRequests() .antMatchers("/user/**").authenticated() .antMatchers("/manager/**").access("hasAnyRole('ROLE_MANAGER','ROLE_ADMIN')") .antMatchers("/admin/**..
-
[Test] Mockito 기반의 Spring 단위 테스트스프링 2023. 1. 12. 23:25
Mockito Mockito는 개발자가 동작을 직접 제어할 수 있는 가짜(Mock) 객체를 지원하는 테스트 프레임워크이다. 일반적으로 Spring으로 웹 애플리케이션을 개발하면, 여러 객체들 간의 의존성이 생긴다. 이러한 의존성은 단위 테스트를 작성을 어렵게 하는데, 이를 해결하기 위해 가짜 객체를 주입시켜주는 Mockito 라이브러리를 활용할 수 있다. Mockito를 활용하면 가짜 객체에 원하는 결과를 Stub하여 단위 테스트를 진행할 수 있다. %주의% Mockito도 테스팅 프레임워크이기 때문에 JUnit과 결합되기 위해서는 별도의 작업이 필요하다. 기존의 JUnit4에서 Mockito를 활용하기 위해서는 클래스 어노테이션으로 @RunWith(MockitoJUnitRunner.class)를 붙여주..
-
[Test] 단위테스트스프링 2023. 1. 12. 22:08
단위 테스트는 하나의 모듈을 기준으로 독립적으로 진행되는 가장 작은 단위의 테스트이다. 애플리케이션에서 작동하는 하나의 기능 또는 메소드로 이해할 수 있다. 예를 들면 웹 애플리케이션에서 로그인 메소드에 대한 독립적인 테스트가 1개의 단위 테스트가 될 수 있다. 즉, 단위 테스트는 애플리케이션을 구성하는 하나의 기능을 올바르게 작동하는 지 독립적으로 테스트하는 것으로, "어떤 기능이 실행되면 어떤 결과가 나온다." 정도로 테스트를 진행한다. 테스트 코드를 작성한다고 하면 거의 단위 테스트를 의미한다. 통합 테스트는 실제 여러 컴포넌트들 간의 상호작용을 테스트하기 때문에 모든 컴포넌트들이 구동된 상태에서 테스트를 하게 된다. 그렇기에 통합 테스트를 위해서는 캐시나 데이터베이스 등 다른 컴포넌트들과 실제 연..
-
Swagger이용하기2스프링 2023. 1. 9. 19:03
인터셉터를 적용할 시 Swagger를 이용하는 url을 제외 시켜야 한다. 만일 인터셉터로 해당 url을 제외시키지 않는다면 WhiteLabel에러를 발생시킨다. 따라서 접근이 불가능해 Swagger를 이용할 수 없다. @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new LogInterceptor()) .order(1) .addPathPatterns("/**") .excludePathPatterns("/css/**", "/*.ico", "/error"); registry.addInterceptor(new LogInCheckInterceptor()) .order(2) .addPathP..