java/spring 11

[Spring] Security Handler에 @Value 값 받아오기

URL의 하드코딩을 막기 위해 리팩토링을 하는 중, 에러가 났다. UriComponentsBuilder에서 @Value 의 값이 정상적으로 사용되지 않는 것을 확인하였고, 처음에는 UriComponentsBuilder의 문제라고 생각되서 단순 문자열로 만들어주었다. 하지만 똑같이 에러가 나는 것을 확인할 수 있었고, 불러온 ip의 값이 null이 되는 것을 찾아내었다. 그래서 Handler에서 값을 받는 방법을 찾아보다가, Spring의 Bean 등록 순서에 있어서의 문제라는 것을 확인하였다. 따라서 Config에서 다음과 같은 Bean을 static으로 추가해주고(static이여야 먼저 빈 등록이 되어 값을 가져올 수 있다) Config에서 Handler로 ip를 DI해주었다. @Bean public ..

java/spring 2022.12.06

[Spring] MapStruct @Mapping 에너테이션

string을 받아서 객체의 필드 값 string으로 매핑을 해주고 싶었는데, 이거때문에 전부 다 적자니 귀찮았다. 그래서 찾아보니까 @Mapping 에너테이션으로 처리가 가능했다. String -> Object.String @Mapping(source = "givenCoin", target = "givenCoin.code") @Mapping(source = "takenCoin", target = "takenCoin.code") Swap swapPostToSwap(SwapDto.Post requestBody); 참고 MapStruct 1.5.3.Final Reference Guide MapStruct 1.5.3.Final Reference Guide If set to true, MapStruct in w..

java/spring 2022.12.01

[Java] MimeMessageHelper를 이용하여 메일 전송

gmail smtp를 이용하여 자바로 메일을 자동 전송 로그인 이메일 인증, 비밀번호 찾기에 이용하기 위해 제작하였다. 1. Gmail 앱 비밀번호 설정 Gmail 계정 관리 - 보안 - Google에 로그인 - 앱 비밀번호 에서 앱 비밀번호를 생성해준다. 생성하고 제공받은 비밀번호를 복사해두자. 2. properties 설정 #메일 인증 spring.mail.host=smtp.gmail.com spring.mail.port=587 spring.mail.username= Gmail 계정 spring.mail.password= 앱 비밀번호 spring.mail.properties.mail.smtp.starttls.enable=true spring.mail.properties.mail.smtp.auth=tr..

java/spring 2022.11.28

[Spring Security] @AuthenticationPrincipal로 token claims 바로 받기

controller단에서 토큰 정보를 가지고 작업을 하고 싶을 때, 다음과 같이 간단하게 불러올 수 있다. 먼저 SecurityFilter에 다음과 같은 작업을 추가 /** * Authentication(인증) 객체를 SecurityContext 에 저장 */ private void setAuthenticationToContext(Map claims) { List authorities = customAuthorityUtils.createAuthorities(Role.valueOf((String) claims.get("roles"))); Authentication authentication = new UsernamePasswordAuthenticationToken(claims, null, authoriti..

java/spring 2022.11.23

[Spring Security] HttpSecurity.authorizeHttpRequests() 미적용

아직 해결하지 못한 문제. 토큰 생성과 인증은 잘 되는데, 권한에 따른 접근 제한을 주기 위해 HttpSecurity.authorizeHttpRequests()를 사용하려 했으나, 적용이 되지 않는 상황이다. 아래는 요청 로그와 필터 체인 목록이다. ************************************************************ Request received for GET '/users': org.apache.catalina.connector.RequestFacade@27ea5644 servletPath:/users pathInfo:null headers: authorization: Bearer 토큰값 user-agent: PostmanRuntime/7.29.2 accept:..

java/spring 2022.11.18

[Spring] 서버에서 get 요청으로 이미지 전송

프로젝트 내용 중 get 요청을 받아서 aws 서버 안에 저장된 이미지를 전송하는 기능을 구현해야했다. 해당 내용으로 검색을 하니 보통 MultipartFile을 이용하여 전송하는 경우가 많았는데, postman으로 get 요청을 해서 바로 이미지를 확인할 수 있도록 구현하고 싶었기 때문에 다른 방법으로 구현하였다. Service @Transactional public byte[] pathToImages(String path) throws IOException { InputStream imageStream = new FileInputStream(path); byte[] imageByteArray = IOUtils.toByteArray(imageStream); imageStream.close(); retu..

java/spring 2022.10.18

[spring] mysql 연동시 Caused by: java.sql.SQLSyntaxErrorException: Table 'database.table' doesn't exist 에러 이상한 점

mysql 연동 실습 중 yml 설정을 완료하고 빌드를 했더니 다음과 같은 오류가 발생했다. 빌드가 완전히 종료되지 않는 것을 보니 어찌저찌 실행은 되고있는 느낌이긴 했다. 하지만 오류가 뜨니까 해결하고 싶은 마음에 해당 오류를 검색해봤다. 대부분은 대소문자 구분없이 사용했을 때 발생한 오류라고 한다. 하지만 내 경우에는 데이터베이스명, 테이블명이 모두 소문자이므로 문자 오류도 아니었다. 혹시 몰라서 post, get 요청을 몇번 테스트 해봤다. postman으로 request를 보냈을 때 response가 정상적으로 왔었다. 그래서 mysql에서 존재하지 않는다는 테이블 및 오류가 발생하지 않은 테이블을 각각 하나씩 확인해봤더니, 다음과 같이 정상적으로 연동이 되고 있음을 확인할 수 있었다. 정상적으로..

java/spring 2022.09.16