Простая аутентификация конечных точек REST - PullRequest
0 голосов
/ 03 марта 2019

Я изучаю, насколько безопасны мои конечные точки, но все, что я искал, содержит довольно сложные примеры, которые на самом деле не ответили на мой вопрос, и сейчас, просто ради этого примера проекта, я искал что-то простое.

Мое текущее решение - сделать так, чтобы конечные точки возвращались следующим образом:

return authenticate(request.headers) ? cityService.getCity() : utils.unauthenticatedResponse();

Где authenticate (request.headers) проверяет токен в заголовке.Я хочу улучшить этот метод проверки подлинности перед каждым запросом к моим конечным точкам (кроме входа в систему и регистрации), чтобы я мог просто вернуть cityService.getCity (), и мне не нужно будет делать эту проверку каждый раз.

Буду признателен за все ответы, но, пожалуйста, сделайте так, чтобы вы понимали, так как я только начинающий.

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

Поскольку вам необходимо запускать метод authenticate перед каждым запросом, вам необходимо реализовать Filter.Это довольно просто, и вы можете получить шаги и шаблон для реализации фильтра здесь .

Каждый запрос к конечной точке сначала проходит через фильтр (это настраивается), где вы можете иметьметод authenticate, а затем разрешите его соответственно.

Для начала, вы можете реализовать фильтр, как показано ниже:

@Component
public class AuthFilter implements Filter {

    @Override
    public void doFilter
      ServletRequest request, 
      ServletResponse response, 
      FilterChain chain) throws IOException, ServletException {

        HttpServletRequest req = (HttpServletRequest) request;
        if(authenticate(req.getHeaders)){
            chain.doFilter(request, response);
        } else {
            //else logic, ie throw some exception in case authenticate returns false
        }
    }

}

Преимущества, которые это обеспечивает:

  • Вы можете реализовать несколько фильтров
  • Вы можете указать порядок / приоритет для фильтров
  • Вы можете настроить, какие конечные точки должны проходить через фильтр, а какие нет.
0 голосов
/ 03 марта 2019

Вы можете использовать ContainerRequestFilter (если вы используете Spring / Tomcat)

Каждый запрос, поступающий на сервер, будет проходить через этот фильтр, поэтому вы можете реализовать в нем свой код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...