• Какой принцип работы при аутентификации JWT?

    @idyoshin
    jwt в первую очередь используется в микросервисных архитектурах, когда конечный клиентский запрос будет обрабатываться одним из нескольких серверов.

    Классически в такой архитектуре использовали механизмы OAuth. которые при обслуживании каждого запроса клиента осуществляли запрос на сервер OAuth - "клиент с токеном ААА запрашивает выполнение действия БББ"

    Понятно что узким местом становится сервер OAuth - который должен выдержать "шторм" запросов при нагрузке. Вторым узким местом такой архитектуры становится увеличение времени ожидания ответа на запрос - внутри запроса как минимум будет выполнен 1 запрос авторизации.

    Если мы говорим о "классическом" монолите, то на пример использование старых cookie требует от сервера держать в памяти все открытые сессии пользователей - тоже большая нагрузка на сервис авторизации.

    JWT решает эти проблемы следующим путем: access токен сразу же содержит необходимую информацию: на пример о Ролях текущего пользователя, или о доступных ему действиях, кроме того предоставляет информацию о времени жизни этого токена. Обязательно в конце токена цифровая подпись. По ней собственно и проверяется "действительность" токена.

    Алгоритм прост:
    1. осуществить авторизацию - получить ответ 2 токена access, refresh.
    2. обращаемся к микросервисам с использованием access токена.
    3. если необходимо с помощью refresh токена обновляем access токен.
    4. когда и refresh токен истек - осуществляем повторную авторизацию.

    Где хранить JWT токен - где угодно. все зависит от инструментов и реализации. На пример можно реализовать хранение токена в LocalStorage, и пробрасывание его во время каждого запроса в виде header'а. Если один и тот же домен - то токен можно хранить в cookie и т.д.

    Что хранить в виде полезной нагрузки? Сам разработчик должен для себя решить какой объем информации публиковать в таком токене, кроме того стоит учитывать что информацию из токена можно прочитать - это просто base64 кодированная JSON строка...
    Ответ написан
    1 комментарий
  • Spring, CrudRepository, как реализовать update action?

    @idyoshin
    Всё просто - забываете "смыть" изменения. После `userRepository.save(u);` выполните `userRepository.flush();` или в один хоп `userRepository.saveAndFlush(u);`
    Ответ написан
    Комментировать
  • Убрать экранирование ковычек в json ответе Spring+Hibernate+Postgresql?

    @idyoshin
    нужно проработать транспортный объект, который будет маппится в/из JSON представления.

    Или дешево и сердито работать с Map тогда вообще можно так:

    @Inject
        private JsonParser jsonParser;
    
        @RequestMapping(value="/user_profile/{id}", method = RequestMethod.GET)
        public ResponseEntity<Map<String, Object>> get(@PathVariable("id") Long id) {
            UserEntity entity = userRepository.get(id);
            Map<String, Object> profile = jsonParser.parseMap(entity.getUserProfile());
            return new ResponseEntity(profile, HttpStatus.OK);
        }
    Ответ написан
    1 комментарий
  • Как начать писать вэб приложения( Postgresql+Spring MVC + JS)?

    @idyoshin
    Возьми готовый jhipster генератор - и изучи что он делает при генерации кода для твоей сущности -- получишь PostgreSQL (или любая другая БД или даже MongoDB) + Spring DATA JPA + (возможно отключить из конфигурации Spring DATA Elasticsearch для полнотекствого поиска) + Spring MVC + AngularJS на стороне клиента.

    Достаточно сгенерировать только пару сущностей что бы посмотреть на все в сборе ( с учетом внешних ключей) - генерируется достаточно неплохой код и, по-моему, его можно использовать для обучения.

    После чего можно уже будет и создавать свое с чистого листа - выбрасывая ненужное на данном этапе - или перенастраивать то что было сгенерировано. Это уж кому как нравится.
    Ответ написан
    Комментировать
  • Как прочитать данные с COM-порта из Java?

    @idyoshin
    у меня в свое время для работы с СОМ получилось с полпинка на rxtx-java
    Ответ написан
    Комментировать
  • Как исправить ситуацию, когда GlassFish не обрабатывает JSF-страницы?

    @idyoshin
    какая версия Glassfish?

    Если довольно старый (c JEE5) достаточно просто бросить в WEB-INF пустой faces-config.xml

    Если свежий: по-умолчанию все jsf представления сейчас facelets. - вы видите скорее всего чистый xhtml - вместо xhtml суффикса достаточно добавить jsf (по-умолчанию в JEE7)

    Если есть желание то можно в web.xml прописать запрет на отдачу чистых xhtml файлов - что бы пользователю не отдавались необработанные вьюшки.
    Ответ написан
    Комментировать