Как я могу использовать SecurityContext в Jax-RS для получения токена указанного пользователя? - PullRequest
0 голосов
/ 14 апреля 2020

Могу ли я сделать это? Я использую SecurityContext из Jax-rs для получения текущего студента

 @GET 
    @Secured
    @Path("/books") 
    @Produces("application/json")
    public List<Book> getBooks(@Context SecurityContext securityContext){ 
        Student s = (Student)securityContext.getUserPrincipal();
        TypedQuery<Book> query = em.createQuery("SELECT s.books from Student s where s.token = :token", Book.class);
        query.setParameter("token", s.getToken());
        List<Book> resultList = query.getResultList();
        return resultList;  

1 Ответ

0 голосов
/ 14 апреля 2020

Я не уверен, работает ли ваш. Я реализовал обработку безопасности с пружинной защитой, и она отлично работает, как это. Это похоже, но не то же самое.

SecurityContext securityContext = SecurityContextHolder.getContext();
Authentication authentication = securityContext.getAuthentication();

User loggedinUser = null;

if (authentication != null) {
    Object principal = authentication.getPrincipal();
    loggedinUser = principal instanceof SpringSecurityUser ? ((SpringSecurityUser)principal).getUser() : null;
}

В этом примере вы можете получить доступ к токену или паролю или что-либо еще с помощью

String token = loggedinUser.getToken();
...