Я знаю, что защита REST API широко комментируется, но я не могу создать небольшой прототип, соответствующий моим критериям (и мне нужно подтвердить, что эти критерии реалистичны). Существует так много вариантов, как защитить ресурсы и как работать с безопасностью Spring, мне нужно уточнить, реалистичны ли мои потребности.
Мои требования
- Аутентификатор, основанный на токенах - пользователи предоставят свои учетные данные и получат уникальный токен с ограниченным временем доступа. Я хотел бы управлять созданием токенов, проверкой действительности, истечением срока в моей собственной реализации.
 - Некоторые ресурсы REST будут общедоступны - нет необходимости аутентифицироваться вообще,
 - Некоторые ресурсы будут доступны только для пользователей с правами администратора,
 - Другой ресурс будет доступен после авторизации для всех пользователей.
 - Я не хочу использовать обычную проверку подлинности
 - Конфигурация кода Java (не XML)
 
Текущее состояние
Мой REST API работает очень хорошо, но теперь мне нужно его защитить. Когда я искал решение, я создал фильтр javax.servlet.Filter:
  @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) req;
        String accessToken = request.getHeader(AUTHORIZATION_TOKEN);
        Account account = accountDao.find(accessToken);
        if (account == null) {    
            throw new UnauthorizedException();    
        }
        chain.doFilter(req, res);
    }
Но это решение с javax.servlet.filters не работает так, как мне нужно, потому что есть проблема с обработкой исключений через @ControllerAdvice с Spring servlet dispatcher.
Что мне нужно
Я хотел бы знать, являются ли эти критерии реалистичными и получить какую-либо помощь, как начать защищать REST API с помощью Spring Security. Я прочитал много учебников (например, Spring Data REST + Spring Безопасность), но все работают в очень простой конфигурации - пользователи с их учетные данные сохраняются в памяти в конфигурации, и мне нужно работать с СУБД и создавать собственный аутентификатор.
Пожалуйста, дайте мне несколько идей о том, как начать.