-
Spring Boot(스프링부트) JWT 토큰 생성/발급Spring boot , 스프링 2023. 3. 3. 08:39반응형
Spring Boot(스프링부트) JWT 토큰 생성/발급
- Spring API에서 JWT 토큰 발급하기 Spring API에서는 JWT 토큰을 발급하기 위해 Spring Security와 JWT 라이브러리를 사용할 수 있습니다. 예를 들어, 다음과 같이 구성할 수 있습니다.
반응형@Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private UserDetailsServiceImpl userDetailsService; @Autowired private JwtRequestFilter jwtRequestFilter; @Autowired public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder()); } @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } @Bean public JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint() { return new JwtAuthenticationEntryPoint(); } @Bean public JwtTokenUtil jwtTokenUtil() { return new JwtTokenUtil(); } @Override protected void configure(HttpSecurity http) throws Exception { http.csrf().disable() .authorizeRequests().antMatchers("/authenticate").permitAll() .anyRequest().authenticated() .and().exceptionHandling().authenticationEntryPoint(jwtAuthenticationEntryPoint()) .and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS); http.addFilterBefore(jwtRequestFilter, UsernamePasswordAuthenticationFilter.class); } }
위 코드에서는 JwtRequestFilter라는 클래스를 사용하여 JWT 토큰을 검증합니다. 이 클래스는 요청 헤더에 Authorization 필드가 있는지 검사하고, JWT 토큰을 파싱하여 인증을 수행합니다.
반응형@Component public class JwtRequestFilter extends OncePerRequestFilter { @Autowired private UserDetailsServiceImpl userDetailsService; @Autowired private JwtTokenUtil jwtTokenUtil; @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException { final String requestTokenHeader = request.getHeader("Authorization"); String username = null; String jwtToken = null; if (requestTokenHeader != null && requestTokenHeader.startsWith("Bearer ")) { jwtToken = requestTokenHeader.substring(7); try { username = jwtTokenUtil.getUsernameFromToken(jwtToken); } catch (IllegalArgumentException e) { logger.error("Unable to get JWT Token", e); } catch (ExpiredJwtException e) { logger.warn("JWT Token has expired", e); } } else { logger.warn("JWT Token does not begin with Bearer String"); } if (username != null && SecurityContextHolder.getContext().getAuthentication() == null) { UserDetails userDetails = this.userDetailsService.loadUserByUsername(username); if (jwtTokenUtil.validateToken(jwtToken, userDetails)) { UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken = new UsernamePasswordAuthenticationToken( userDetails, null, userDetails.getAuthorities()); usernamePasswordAuthenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request)); SecurityContextHolder.getContext().setAuthentication(usernamePasswordAuthenticationToken); } } chain.doFilter(request, response); } }
반응형'Spring boot , 스프링' 카테고리의 다른 글
Spring Boot + maven + AWS EC2 - ubuntu GitHub Action(깃헙 액션 CI/CD) (1) (0) 2023.04.06 Spring boot SecurityconfigurerAdaptor 사용 가능한 프로젝트 (0) 2023.03.12 Spring Boot OAuth2 구글 소셜로그인 (네이버,카카오 등) (3) 예제 (0) 2023.03.03 Spring Boot OAuth2 구글 소셜로그인 (네이버,카카오 등) (2) 예제 (0) 2023.03.03 Spring Boot OAuth2 구글 소셜로그인 (네이버,카카오 등) (1) 예제 (0) 2023.03.03