내일배움캠프 33일차 TIL _ 7주 4일차
2024. 5. 30. 21:32ㆍTIL Java
- 오늘 있었던 일
- 개인과제
- 알고리즘
SPRIONG
- 스프링 정리
더보기
숙련 스프링 공부
- Jwt 로 Refresh 토큰 구현하기
Refresh토큰이 필요할때 로그인 하게 만들 수 있다.//Refresh 전용 토큰 검사기 public boolean validateRefreshToken(String token, HttpServletResponse response) { try { Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(token); return true; } catch (ExpiredJwtException e) { ErrorMessage( response, "Expired JWT Exception, 만료된 JWT Refresh token 입니다.\n로그인을 해 주세요 : @Post : /api/user/login"); } catch (UnsupportedJwtException e) { ErrorMessage( response, "Unsupported Jwt Exception, 지원되지 않는 JWT Refresh 토큰 입니다."); } catch (SignatureException | MalformedJwtException e) { ErrorMessage( response, "Invalid JWT signature, 유효하지 않는 JWT Refresh 서명 입니다."); } catch (IllegalArgumentException e) { ErrorMessage( response, "JWT claims is empty, 잘못된 JWT Refresh 토큰 입니다."); } return false; } // 토큰 말료시 토큰 생성 private void handleExpiredToken(ExpiredJwtException e,String token, HttpServletResponse response) { String username = e.getClaims().getSubject(); User user = userRepository.findByUsername(username).orElseThrow(() -> new IllegalArgumentException("해당 유저가 존제하지 않습니다.")); if(!validateRefreshToken(substringToken( user.getRefreshToken() ) ,response)){ /* String Refresh_token = createRefreshToken( user.getUsername(), user.getRole() ); user.setRefreshToken(Refresh_token);*/ return; } if (user != null) { newAccessToken( response, user ); } else { logger.error("Refresh token 을 찾을 수 없습니다."); } } // Access토큰 말료시 Access토큰 생성 private void newAccessToken(HttpServletResponse response, User user) { String newAccessToken = createAccessToken( user.getUsername() , user.getRole()); addToken( newAccessToken, response ); response.setStatus( 400); response.setContentType( "text/plain;charset=UTF-8"); try (PrintWriter writer = response.getWriter()) { writer.write("Access 토큰이 재생성되었습니다 다시 시도해 주세요"); } catch (IOException ex) { logger.error("응답 오류"); } }
- 리플 생성시 토큰의 사용자 와 이름 통일하기
-
이런 방법으로 사용자 이름 을 넣을 수 있다.public ReplyResponseDto(Reply reply , User user) { this.id = reply.getId(); this.reply_username = user.getUsername(); this.reply_content = reply.getReply_content(); this.created = reply.getCreated(); }
알고리즘 문제 풀기
● 체육복
더보기
● 체육복 //링크
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
class Solution {
public int solution(int n, int[] lost, int[] reserve) {
boolean[] stu = new boolean[n+1];
List<Integer> list = new ArrayList<>();
Arrays.sort(lost);
Arrays.sort(reserve);
for (int i : lost){
stu[i - 1] = true;
}
for (int i : reserve){
if (stu[i - 1]){
stu[i - 1] = false;
}else {
list.add(i);
}
}
for (int i : list){
if ( i >= 2 && stu[i - 2]) {
stu[i - 2] = false;
}else if(stu[i]){
stu[i] = false;
}
}
int answer = n;
for (boolean i : stu){
if (i){
answer--;
}
}
return answer;
}
}
- 첫 시도때 태스트문도 통과했지만 후반 특정문제 3개와 방법을 바꾸면 2개가 틀린다.
- 문제 지문에
- 바로 앞번호의 학생이나 바로 뒷번호의 학생에게만 체육복을 빌려줄 수 있습니다
- 이거 때문인가
- 앞뒤의 순번이 있는지 확인후 넣었다 = 특정 문제 3개가 틀림
- 3번째 for문의 순서를 바꿔봤다 = 특정 문제 2개가 틀린다.
- 임의로 순서를 만들어 채육복을 빌려주는 순서를 만든다. = 통과
-
Arrays.sort(lost); Arrays.sort(reserve);
- 문제 지문에
- 밑은 다른 사람의 풀이
-
class Solution { public int solution(int n, int[] lost, int[] reserve) { int[] people = new int[n]; int answer = n; for (int l : lost) people[l-1]--; for (int r : reserve) people[r-1]++; for (int i = 0; i < people.length; i++) { if(people[i] == -1) { if(i-1>=0 && people[i-1] == 1) { people[i]++; people[i-1]--; }else if(i+1< people.length && people[i+1] == 1) { people[i]++; people[i+1]--; }else answer--; } } return answer; } }
- 엄청 깔끔하게 만들었네
당일 회고
- ㅇ? 과제에 스프링 서큐리티를 써도 된다고요? 에? 에????에에에에

'TIL Java' 카테고리의 다른 글
내일배움캠프 35일차 TIL _ 8주 1일차 (0) | 2024.06.03 |
---|---|
내일배움캠프 34일차 TIL _ 7주 5일차 (0) | 2024.05.31 |
내일배움캠프 31일차 TIL _ 7주 2일차 (0) | 2024.05.28 |
내일배움캠프 30일차 TIL _ 7주 1일차 (0) | 2024.05.27 |
내일배움캠프 29일차 TIL _ 6주 5일차 (0) | 2024.05.24 |