Добавить идентифицированный идентификатор пользователя по фильтру в сервлет Java - PullRequest
0 голосов
/ 14 июня 2019

У меня есть фильтр аутентификации, который авторизует вызов REST по токену JWT.Я уже реализовал аутентификацию через JWT и валидацию JWT с помощью фильтра.Как передать идентификатор пользователя из JWT сервлету в процессе фильтрации?

1 Ответ

2 голосов
/ 14 июня 2019

Обычно это делается с помощью HttpServletRequestWrapper . Это объект, который позволяет добавлять или переопределять методы в стандартном HttpServletRequest.

Внутри вашего фильтра оберните оригинал HttpServletRequest своим RequestWrapper, а затем отправьте RequestWrapper сервлету вместо оригинала HttpServletRequest.

Например, вот простой RequestWrapper для передачи аутентифицированного идентификатора пользователя:

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

public class AuthenticatedRequest extends HttpServletRequestWrapper {

    private int userId;

    public AuthenticatedRequest(HttpServletRequest req, int userId) {
        super(req);
        this.userId = userId;
    }

    public int getUserId() {
        return userId;
    }

}

Оберните исходный запрос в свой фильтр аутентификации перед отправкой в ​​цепочку сервлетов:

// in filter class
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) 
    throws ServletException {

    int userId = null;

    // do something to get your authentication data (userId)
    // ...
    // wrap the original request with the "AuthenticatedRequest" 
    AuthenticatedRequest authRequest = new AuthenticatedRequest(req, userId);

    // forward the AuthenticatedRequest to the servlet
    chain.doFilter(authRequest, res);

}

Сервлет может затем использовать ваши новые методы упакованного запроса для доступа к данным аутентификации:

// in servlet class
@Override
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException
{
    // this request object is actually your own AuthenticatedRequest wrapper
    int userId = req.getUserId();

Это и это охватывают еще некоторые детали реализации.

...