Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

STOMP Authorization, Argument Resolver #15

Open
wants to merge 4 commits into
base: develop
Choose a base branch
from

Conversation

fanta4715
Copy link
Collaborator

구현 기능

  • STOMP에서 CONNECT 요청시 JWT Token 파싱해서 인증 정보 세션에 저장하는 기능
  • CONNECT를 제외한 다른 요청시, 세션에 있는 인증정보로 UserId 넣어주는 기능

현재 CONNECT 요청시에만 JWT를 파싱하고, 이후에는 JWT를 파싱하지 않습니다. 매 요청마다 JWT가 필요하다고 판단이 들면, 추후에 수정하면 될 것 같습니다.

@fanta4715 fanta4715 self-assigned this May 16, 2024
@fanta4715 fanta4715 linked an issue May 16, 2024 that may be closed by this pull request
@fanta4715 fanta4715 changed the title STOMP Authorization 구현 STOMP Authorization, Argument Resolver May 16, 2024
import org.springframework.util.StringUtils;
import org.springframework.messaging.simp.stomp.StompHeaderAccessor;

public class HeaderUtil {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

HeaderUtil보다는 TokenParser나 TokenUtil이 클래스 역할을 더 잘 드러내는 이름이라고 생각합니다.

Comment on lines +11 to +32
public static String extractToken(HttpServletRequest request, String header, String tokenPrefix) {
String bearerToken = request.getHeader(JwtVO.HEADER);
if (bearerToken == null) {
return null;
}

if (!bearerToken.startsWith(JwtVO.TOKEN_PREFIX)) {
throw new CustomException(ErrorCode.INVALID_TOKEN_PREFIX_ERROR);
}

return bearerToken.substring(7);
}

public static String extractToken(StompHeaderAccessor request, String header, String tokenPrefix) {
String bearerToken = request.getFirstNativeHeader(header);

if (!StringUtils.hasText(bearerToken) || !bearerToken.startsWith(tokenPrefix)) {
throw new CustomException(ErrorCode.INVALID_TOKEN_PREFIX_ERROR);
}

return bearerToken.substring(tokenPrefix.length());
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. 코드를 확인했을 때, 인자에 해당하는 header, tokenPrefix가 각각 JwtVO.HEADER, JwtVO.TOKEN_PREFIX로 고정된 값인 것 같습니다. 그렇다면 인자가 없어도 되는 것 아닌지, 중복되어 불필요한 부분이 되는 것 같습니다.
  2. 첫번째 extractToken에서 경우에 따라 null 값을 반환하고 있는 것으로 확인했습니다. 해당 클래스 내에 validRequestHeader 함수를 추가하여 헤더가 null인지 확인한 후 extractToken을 실행하는 방향으로 개선할 수 있다고 생각합니다. null 값을 반환하지 않는 방식으로 변경함으로써 null 체크에서 발생할 수 있는 문제들을 없앨 수 있다고 생각합니다.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. 이 부분 제 잘못입니다. 감사합니다.
  2. 넵 동의합니다.

수정하고 다시 올리겠습니다

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

WebSocket JWT Authorization
3 participants