You can do it by creating custom validation.
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = {OwnUserValidator.class})
public @interface OwnUser {
String message() default Messages.INVALID_WALLET;
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
//
import org.springframework.beans.factory.annotation.Autowired;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
public class OwnUserValidator implements ConstraintValidator<OwnUser, String> {
@Override
public void initialize(OwnUser constraintAnnotation) {
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
String tokenName = THREAD_LOCAL_TOKEN.get();
if(tokenName.equalsIgnoreCase(value)){
return true;
}
return false;
}
}
then use this @OwnUser annotaion before user field in request body
public class Request implements Serializable{
private static final long serialVersionUID = 1L;
@OwnUser
private String user;
}
when request call doFilterInternal method here u save token in threadLocal:
public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {
public static ThreadLocal<String> THREAD_LOCAL_TOKEN = new ThreadLocal<>();
@Override
protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException {
//get token from httpServlet request.
THREAD_LOCAL_TOKEN.set(nameFromtoken);
//ur neccessary code
filterChain.doFilter(httpServletRequest, httpServletResponse);
}
}