반응형

분류 전체보기 402

XML to Java Object 변환하기 JAXB API

JAXB api를 사용하여 XML 형식의 데이터를 자바 객체로 변환하는 방법입니다. 지금까지 JSON 형식의 데이터만 접해보다가 이번에 공공데이터 포털의 open api를 사용하며 데이터 포멧이 XML인 경우를 처음 접해봤습니다. 데이터를 조회하여 xml 형식으로 뽑아오는 것은 금방 할 수 있었지만, 조회된 XML 데이터를 자바 객체로 변환하는 것은 생소하여 생각보다 시간이 걸렸습니다. 해당 포스팅은 JAXB에 대한 구체적인 내용과 설명, 이해에 관한 내용 없이 단순하게 XML 데이터를 Java Object로 변환하는 과정만 담았습니다. 추후 해당 내용에 대해 더 공부하여 구체적인 설명과 함께 다시 포스팅을 작성하도록 하겠습니다. JAXB (Java Architecture for XML Binding)는..

Programming/Java 2021.09.28

JWT + Redis Logout 로그아웃 구현하기

Spring Security + JWT 로그인 기능 파헤치기 - 1 로그인 기능은 거의 대부분의 애플리케이션에서 기본적으로 사용됩니다. 추가로 요즘은 웹이 아닌 모바일에서도 사용 가능하다는 장점과 Stateless 한 서버 구현을 위해 JWT를 사용하는 경우를 많 wildeveloperetrain.tistory.com Spring Security + JWT + Redis + JPA 사용한 로그인 구현의 마지막 Logout 포스팅입니다. Spring Security + JWT 기능 파헤치기 1, 2 포스팅과 Redis를 사용하여 RefreshToken을 저장하는 포스팅에 이어 4번째 포스팅입니다. (이전 내용은 위 링크를 참고 부탁드리겠으며, 전체 코드 GitHub 주소 및 참고 내용은 맨 하단에 링크해두..

application.yml (yaml) 숫자가 0으로 시작했을 때 오류

Spring Boot에서는 외부 설정값을 관리하는 파일로 application.properties 또는 application.yml 을 사용하는데요. application.yml 파일에서 0으로 시작하는 숫자 값을 사용하며 발생한 오류입니다. number: test: 002003 templateCode 라는 값을 외부 설정값으로 등록하여 프로그램 내부에서 사용하기 위해서 application.yml 파일에 해당 값을 등록하였습니다. 그렇게 프로그램 내부에서 해당 templateCode라는 값을 가지고 외부에 요청을 했는데, 코드가 일치하지 않는다는 결과를 받았습니다. 확인을 위해 log를 찍어보니 yml 파일에 002003으로 등록한 값이 프로그램 내부에서 1027로 출력되고 있는 것을 확인했는데요. *..

Programming/Error 2021.09.25

security + jwt + redis 로그인 기능 구현 (최종)

이전 Spring Security + JWT 로그인 구현에서 마지막으로 Refresh Token 저장을 위한 Redis를 추가하고, 토큰 재발급 기능을 추가하여 로그인 기능을 완성하였습니다. Spring Security + JWT 로그인 기능 파헤치기 - 1 로그인 기능은 거의 대부분의 애플리케이션에서 기본적으로 사용됩니다. 추가로 요즘은 웹이 아닌 모바일에서도 사용 가능하다는 장점과 Stateless 한 서버 구현을 위해 JWT를 사용하는 경우를 많 wildeveloperetrain.tistory.com 앞서 포스팅 한 Security + JWT 로그인 구현 과정입니다. 이어지는 내용이기 때문에 참고 부탁드리겠습니다. Spring Boot Redis 두 가지 사용 방법 RedisTemplate, Red..

spring security + JWT 로그인 기능 파헤치기 - 2

Spring Security + JWT 로그인 기능 파헤치기 - 1 로그인 기능은 거의 대부분의 애플리케이션에서 기본적으로 사용됩니다. 추가로 요즘은 웹이 아닌 모바일에서도 사용 가능하다는 장점과 Stateless 한 서버 구현을 위해 JWT를 사용하는 경우를 많 wildeveloperetrain.tistory.com 전 포스팅에서 이어지는 내용입니다. 참고 부탁드리겠습니다. public ResponseEntity login(UserRequestDto.Login login) { // 1. Login ID/PW 를 기반으로 Authentication 객체 생성 // 이때 authentication 는 인증 여부를 확인하는 authenticated 값이 false UsernamePasswordAuthenti..

spring security + JWT 로그인 기능 파헤치기 - 1

로그인 기능은 거의 대부분의 애플리케이션에서 기본적으로 사용됩니다. 추가로 요즘은 웹이 아닌 모바일에서도 사용 가능하다는 장점과 Stateless 한 서버 구현을 위해 JWT를 사용하는 경우를 많이 볼 수 있는데요. 많이 사용되고, 또 주된 기능인만큼 꼭 한 번은 제대로 공부하고 싶어서 여러 자료를 참고하여 직접 구현하며 정리하는 내용입니다. (현재 코드는 Security + JWT + JPA 를 사용하여 구현되어 있고, 이후 최종적으로 Redis를 사용한 토큰 재발급 과정까지 추가할 예정입니다.) * 본 내용을 보기 전 참고하면 좋을 JWT, Spring Security 동작 원리, 구현된 코드 등은 포스팅 맨 아래 참고 자료로 링크를 첨부해놓았습니다. 도움이 되시길 바라며, 내용 중 잘못된 부분은 지..

UsernameNotFoundException Not Working 이유 파헤치기

Spring security, JWT 로그인 구현 중 UsernameNotFoundException 처리가 안 되는 현상이 발생하였습니다. 분명 해당 Exception 이 발생하지만 최종적으로는 BadCredentialsException 으로 처리되어 최종 response는 403 Forbidden 이 발생하였고, 디버깅을 통해 원인을 찾아봤습니다. @Service @RequiredArgsConstructor public class CustomUserDetailsService implements UserDetailsService { private final UsersRepository usersRepository; @Override public UserDetails loadUserByUsername(St..

io.jsonwebtoken.security.WeakKeyException : which is not secure enough for any JWT HMAC-SHA algorithm.

Security, JWT를 사용한 로그인 구현 중 발생한 에러입니다. 해당 에러는 메세지만 봐도 뭐가 문제인지 쉽게 파악할 수 있었는데요. [com.project.login.api.jwt.JwtTokenProvider]: Constructor threw exception; JwtTokenProvider를 Bean으로 등록하기 위해 객체를 만드는 중, 생성자에서 발생한 에러이고, 해당 내용은 HMAC-SHA algorithm을 사용하기 위해서는 256 bits 이상의 key 값이 필요한데 사용 중인 키는 176 bits로 충분하지 않다는 에러입니다. nested exception is io.jsonwebtoken.security.WeakKeyException: The specified key byte ar..

Programming/Error 2021.09.18

Java 객체 복사 Cloneable interface

Java 객체 복사 Cloneable interface 카드 결제 내역을 기록으로 테이블에 남기던 중, 찾아서 적용한 방식입니다. 이전에 성공 처리된 결제 내역에 대해서 취소 요청한 경우, 기존의 거래 기록 row는 그대로 두고, 다른 데이터는 같지만 state가 취소 요청인 새로운 row를 생성하여 저장해야 하는 상황에서 Cloneable interface를 적용하여 사용하였습니다. @Builder @Getter @Setter @NoArgsConstructor @Entity public class PaymentTransaction extends BaseEntity implements Cloneable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY)..

Programming/Java 2021.09.16

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near

MySQL, MariaDB KeyWords and Reserved Words Caused by: java.sql.SQLSyntaxErrorException: (conn=18727) You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near (Error 중 일부) JPA, MariaDB를 사용하고 있는 프로젝트에서 아직 초기 단계라 따로 테이블을 생성하지 않고 JPA의 @Entity 어노테이션을 통해 자체적으로 테이블이 create 되도록 해놓고 작업을 하던 중 발생한 에러입니다. @Builder @Getter @NoArgs..

Programming/Error 2021.09.16
반응형