Light Blue Pointer
본문 바로가기
Developing/개발일지

2023-12-14, Today I Learned

by Greedy 2023. 12. 14.

WebSecurityConfig

@Bean // 필터
    public JwtAuthorizationFilter jwtAuthorizationFilter() {
        return new JwtAuthorizationFilter(jwtUtil, userDetailsService, objectMapper);
    }

-> 저기서 objectMapper를 왜 넣어주는 건지 궁금해서 10분동안 뒤적뒤적 했는데 그냥 생성자로 주입해주는 거 같다

 

@RequiredArgsConstructor
public class JwtAuthorizationFilter extends OncePerRequestFilter {
    private final JwtUtil jwtUtil;
    private final UserDetailsService userDetailsService;
    private final ObjectMapper objectMapper;

 

 

JwtAuthorizationFilter

@Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
            throws ServletException, IOException {

        String token = jwtUtil.getTokenFromRequest(request);

        if (Objects.nonNull(token)) {
            if (jwtUtil.validateToken(token)) {
                Claims info = jwtUtil.getUserInfoFromToken(token);

                // 인증정보에 유저정보(username) 넣기
                // username -> user 조회
                String username = info.getSubject();
                SecurityContext context = SecurityContextHolder.createEmptyContext();
                // -> userDetails 에 담고
                UserDetailsImpl userDetails = userDetailsService.getUserDetails(username);
                // -> authentication의 principal 에 담고
                Authentication authentication = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());
                // -> securityContent 에 담고
                context.setAuthentication(authentication);
                // -> SecurityContextHolder 에 담고
                SecurityContextHolder.setContext(context);
                // -> 이제 @AuthenticationPrincipal 로 조회할 수 있음
                ApiResponse<Void> responseDto = new ApiResponse<>(HttpStatus.OK.value(), "인증 완료");
                response.setStatus(HttpServletResponse.SC_ACCEPTED);
                response.setContentType("application/json; charset=UTF-8");
                response.getWriter().write(objectMapper.writeValueAsString(responseDto));
                return;

            } else {
                // 인증정보가 존재하지 않을때
                ApiResponse<Void> responseDto = new ApiResponse<>(HttpStatus.BAD_REQUEST.value(), "토큰이 유효하지 않음");
                response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
                response.setContentType("application/json; charset=UTF-8");
                response.getWriter().write(objectMapper.writeValueAsString(responseDto));
                return;
            }
        }
        filterChain.doFilter(request, response);
    }

이거 작성하면서

⭐Response에 객체 만들어서 딸려보내는 방법을 알게되었다

                ApiResponse<Void> responseDto = new ApiResponse<>(HttpStatus.BAD_REQUEST.value(), "토큰이 유효하지 않음");
                response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
                response.setContentType("application/json; charset=UTF-8");
                response.getWriter().write(objectMapper.writeValueAsString(responseDto));
                return;

->

그리고 else말고 if에 들어있는 저 부분은 나중에 controller 리턴값이 똑바로 반환되지 않고 자꾸 저거만 나와서 빼버림

 

 

⭐String이 Char을 포함하는지 아는법

skip.contains(String.valueOf(temp)

 

⭐HashMap의 getOrDefault 

int result = map.getOrDefault(target,-1);

  

⭐List 의 정렬

list.sort((s1, s2) -> s2.compareTo(s1)); // 리스트에 있는 값을 내림차순으로 정렬

 

⭐String끼리 +연산 하는게 상당히 느리기 때문에 Stringbuilder로 만들고 .append()를 해줄것!

'Developing > 개발일지' 카테고리의 다른 글

2023-12-18, Today I Leanred  (0) 2023.12.18
2023-12-15, Today I Learned  (0) 2023.12.15
2023-12-12, Today I Learned  (0) 2023.12.12
2023-12-11, Today I Learned  (0) 2023.12.11
2023-12-08, Today I Learned  (1) 2023.12.08