카테고리 없음

Springboot jwt로그인 4(인증필터)

디비드킴 2024. 1. 13. 16:50

1.jwt서비스에 토큰 오픈 코드 작성

public String getValue(String jwtToken){
    try {
        // JWT 검증을 위한 알고리즘 설정
        Algorithm algorithm = Algorithm.HMAC512(jwtSecret);

        // JWT 검증기 생성
        JWTVerifier verifier = JWT.require(algorithm).build();

        return verifier.verify(jwtToken).getSubject();

    } catch (Exception e) {
        // 토큰이 유효하지 않거나 디코딩에 실패한 경우
        e.printStackTrace();
        log.error("토큰이 유요하지 않습니다");
        return null;
    }
}

2.인증필터 작성

@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
    log.info("인증필터 입장");
    // 현재 요청된 URL 확인
    String requestURI = request.getRequestURI();
    log.info("Request URI: {}", requestURI);

    // 허용되는 URL 패턴 정의
    String allowedPattern = "/pass"; // 예시로 "/public/"로 시작하는 URL은 인증 필터를 통과시킴

    // 허용되는 URL 패턴인 경우 통과
    if (requestURI.startsWith(allowedPattern)) {
        log.info("허용되는 URL, 필터 통과");
        chain.doFilter(request, response);
        return;
    }
    log.info("허용되는 되지않는 URL, 검증시작");
    // 쿠키에서 엑세스 토큰 추출
    String accessToken = extractAccessTokenFromCookie(request);
    log.info("accessToken:{}",accessToken);
    if (accessToken != null) {
        // 엑세스 토큰에서 사용자 ID 추출
        String username = tokenService.getValue(accessToken);
        log.info("username:{}",username);

        // 시큐리티 세션에 인증 주입
        PrincipalDetails principalDetails =new PrincipalDetails(username,null);
        SecurityContextHolder.getContext().setAuthentication(new UsernamePasswordAuthenticationToken(principalDetails, null, principalDetails.getAuthorities()));

        if(username==null){
            set403(response);
        }
        chain.doFilter(request, response);
        return;
    }
    log.info("accessToken을 찾을 수없습니다");
    set403(response);
}

 

테스트

/test,/pass,만료후 테스트
/test,/pass,만료후 테스트

404/404/403 정상

 

코드

https://github.com/novb1492/login/tree/auth-filter

 

GitHub - novb1492/login

Contribute to novb1492/login development by creating an account on GitHub.

github.com