Resolver for token headers

 Header values in class:


 @Data

 @Builder

 @NoArgsConstructor

 @AllArgsConstructor

 public class UserClaims {

 

     private Long userId;

     private String customerId;

     private String taxId;

     private Boolean isDirector;

     private String personalCode;

 }


Resolver class:


 import jakarta.servlet.http.HttpServletRequest;

 import java.util.Objects;

 import org.apache.commons.lang3.StringUtils;

 import org.springframework.core.MethodParameter;

 import org.springframework.web.bind.MissingRequestHeaderException;

 import org.springframework.web.bind.support.WebDataBinderFactory;

 import org.springframework.web.context.request.NativeWebRequest;

 import org.springframework.web.method.support.HandlerMethodArgumentResolver;

 import org.springframework.web.method.support.ModelAndViewContainer;

 

 

 public class UserClaimsResolver implements HandlerMethodArgumentResolver {

 

     private static final String ARGUMENT_NAME = "userClaims";

 

     @Override

     public boolean supportsParameter(MethodParameter methodParameter) {

         Class<?> clazz = methodParameter.getParameterType();

         return clazz.equals(UserClaims.class) && (Objects.equals(methodParameter.getParameterName(), ARGUMENT_NAME));

     }

 

     @Override

     public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer,

                                   NativeWebRequest nativeWebRequest,

                                   WebDataBinderFactory webDataBinderFactory) throws Exception {

         HttpServletRequest request = (HttpServletRequest) nativeWebRequest.getNativeRequest();

         return resolveUserClaims(request, methodParameter);

     }

 

     private UserClaims resolveUserClaims(HttpServletRequest request, MethodParameter methodParameter)

             throws MissingRequestHeaderException {

         Long userId = validateUserId(request, methodParameter);

         String customerId = validateCustomerId(request, methodParameter);

         String taxId = validateTaxId(request, methodParameter);

         Boolean isDirector = validateIsDirector(request, methodParameter);

         String personalCode = validatePersonalCode(request);

         return UserClaims.builder()

                 .userId(userId)

                 .customerId(customerId)

                 .taxId(taxId)

                 .isDirector(isDirector)

                 .personalCode(personalCode)

                 .build();

     }

 

     private Long validateUserId(HttpServletRequest request, MethodParameter methodParameter)

             throws MissingRequestHeaderException {

         String userId = request.getHeader(HEADER_USER_ID);

         if (StringUtils.isBlank(userId)) {

             throw new MissingRequestHeaderException(HEADER_USER_ID, methodParameter);

         }

         return Long.valueOf(userId);

     }

 

     private String validateCustomerId(HttpServletRequest request, MethodParameter methodParameter)

             throws MissingRequestHeaderException {

         String customerId = request.getHeader(HEADER_CUSTOMER_ID);

         if (StringUtils.isBlank(customerId)) {

             throw new MissingRequestHeaderException(HEADER_CUSTOMER_ID, methodParameter);

         }

         return customerId;

     }

 

     private String validateTaxId(HttpServletRequest request, MethodParameter methodParameter)

             throws MissingRequestHeaderException {

         String taxId = request.getHeader(HEADER_TAX_ID);

         if (StringUtils.isBlank(taxId)) {

             throw new MissingRequestHeaderException(HEADER_TAX_ID, methodParameter);

         }

         return taxId;

     }

 

     private Boolean validateIsDirector(HttpServletRequest request, MethodParameter methodParameter)

             throws MissingRequestHeaderException {

         String isDirector = request.getHeader(HEADER_IS_DIRECTOR);

         if (StringUtils.isBlank(isDirector)) {

             throw new MissingRequestHeaderException(HEADER_IS_DIRECTOR, methodParameter);

         }

         return Boolean.valueOf(isDirector);

     }

 

     private String validatePersonalCode(HttpServletRequest request) {

         return request.getHeader(HEADER_PERSONAL_CODE);

     }

 

 }


Usage:


 @PostMapping("/{invoiceNumber}/payments/card")

 @ResponseStatus(HttpStatus.OK)

 public PaymentResponse makePaymentByCard(

         @Valid @Parameter(hidden = true) UserClaims userClaims,

         @PathVariable String invoiceNumber,

         @RequestBody PaymentByCardRequestDto paymentByCardRequestDto,

         @RequestHeader(HEADER_USER_ID) Long userId) {

     return invoiceService.makePaymentByCard(userClaims, invoiceNumber, paymentByCardRequestDto, userId);

 }



Comments

Popular posts from this blog

Installation instructions for some programs on linux ubuntu

Hibernate and Application Performance

write huge text into clob column in oracle