Как написать пользовательскую аннотацию Spring Boot, которая выполняет logi c и возвращает объект - PullRequest
0 голосов
/ 31 марта 2020

Я бы хотел написать пользовательскую аннотацию в Spring Boot, которая возвращает текущего пользователя, отправляющего запрос в мой бэкэнд.

Я уже могу получить пользователя в контроллере с помощью:

@GetMapping(path = "", produces = MediaType.APPLICATION_JSON_VALUE)
@ApiOperation(value = "Searches for a specific function by name or psc", notes = "Displays a desired function with the specified name or psc.")
public List<FunctionTO> getFunctionsByNameOrPsc(@RequestParam(name = "q") String query, @AuthenticationPrincipal Jwt jwt) {
    String user = jwt.getClaims().get("preferred_username").toString();

    return mapper.toFunctionTOList(functionsService.getFunctionsByNameOrPsc(query));
}

Но я хотел бы создать аннотацию, обрабатывающую мой JWT-токен, получая из него имя пользователя и возвращая меня узел «Пользователь» в базе данных.

Что-то вроде:

Контроллер:

@GetMapping(path = "", produces = MediaType.APPLICATION_JSON_VALUE)
@ApiOperation(value = "Searches for a specific function by name or psc", notes = "Displays a desired function with the specified name or psc.")
public List<FunctionTO> getFunctionsByNameOrPsc(@RequestParam(name = "q") String query, @User User user) {
    System.out.println(user.getName()); // Prints username from node

    return mapper.toFunctionTOList(functionsService.getFunctionsByNameOrPsc(query));
}

Аннотация

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PARAMETER)
public @interface User {

}

Логика аннотации c выполнить

public class UserAnnotationImpl {

@Autowired
UsersRepository usersRepository;

private User getUser(@AuthenticationPrincipal Jwt jwt) {
    String username = jwt.getClaims().get("preferred_username").toString();

    return usersRepository.findById(username)
            .orElseThrow(new UsernameNotFoundException());
}
}

Как я могу или могу это сделать?

...