Только что я популяризировал два уникальных навыка входа в систему для школьниц.

Spring

Сегодня я расскажу вам об относительно простой теме, а именно о том, как добиться входа в систему? Подходит для новичков.

Секретное искусство сеанса Хуашаня

Сессия, которую мы называемконтроль сеанса, — это решение, которое поддерживает состояние сеанса на стороне сервера. Вообще говоря, когда клиент обращается к серверу, он будет хранить соответствующую информацию на сервере, генерировать идентификатор сеанса и возвращать его клиенту, а клиент принесет идентификатор сеанса, когда придет в следующий раз, так что личность посетителя можно идентифицировать.

Наиболее распространенный способ передать идентификатор сеанса в запрос — передать его через файл cookie. Файл cookie — это механизм, с помощью которого клиент сохраняет информацию о пользователе. В среде браузера запрос автоматически передает информацию о файле cookie, а сервер также может получить его Идентификатор сеанса.

При внедрении логики входа в систему в Backend сначала получите объект HTTPSession, а затем используйте SetAttribute (), чтобы установить информацию о входе в систему, такой как идентификатор пользователя. При проверке того, есть ли вход в систему, используйте GetAttribute (), чтобы получить соответствующую информацию о сеансе. Если это не получено, это доказывает, что нет входа или сеанс недействительна.

Для таких контейнеров, как Tomcat и Jetty, Session — это часть пространства памяти, открытого на сервере, а структура хранения — Map.

Класс реализации сеанса Tomcat — StandardSession.

图片
картина

Распределенное решение сеанса

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

На рисунке ниже видно, что при развертывании двух Tomcat балансировка нагрузки выполняется через Nginx, первый запрос перенаправляется на Tomcat1, а информация о сеансе сохраняется на Tomcat1. Второй запрос перенаправляется на Tomcat2, но информация о предыдущем сеансе на Tomcat2 отсутствует.Это проблема, возникающая в сеансах с несколькими узлами.

图片
картина

Репликация сеанса

Tomcat имеет встроенную функцию репликации сеанса, то есть ваш сеанс создается в Tomcat1, а Tomcat1 синхронизирует ваш сеанс с Tomcat2, так что, когда ваш запрос достигнет Tomcat2, вы сможете узнать свою идентификационную информацию.

图片
картина

Это решение часто встречается в других средах, таких как реестр Eureka в системе Spring Cloud, который также использует репликацию для синхронизации информации реестра.

Для настройки, связанной с репликацией сеанса Tomcat, обратитесь к официальной документации:tomcat.apache.org/tomcat-8.0-…

Вязкая сессия

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

Обычный способ — перенаправить хэш на IP.IP не очень надежен, потому что он будет меняться. В Nginx есть nginx-sticky-module. Этот сторонний модуль используется для добавления липкого файла cookie, который всегда перенаправляется на один и тот же сервер.

Модуль nginx-sticky-module запишет в куки значение, чтобы определить, на какой узел нужно переслать текущий запрос. клиент. Последующие запросы найдут соответствующий идентификатор в файле cookie, а затем перенаправят его на фиксированный узел.

图片
картина

Централизованное хранилище сеансов

Репликация сеанса потребляет ресурсы сервера и влияет на производительность. Прилипчивые сеансы рискуют создать единую точку отказа. Лучшим подходом к распределенному сеансу является централизованное хранилище.

Так называемое централизованное хранилище предназначено для унифицированного хранения информации о сеансе в определенном месте.Веб-серверы, такие как Tomcat, сами не хранят информацию о сеансе, поэтому серверная служба не имеет состояния, что удобно для расширения в любое время.

图片
картина

Существует множество схем реализации: вы можете реализовать HttpSession для выполнения соответствующего хранения и логики чтения самостоятельно, а можете использовать схему с открытым исходным кодом. Например, Spring Session — хорошее решение с открытым исходным кодом, простое в использовании и поддерживающее несколько методов хранения, таких как Redis, Mysql и т. д.

Если вас интересуют принципы весенней сессии рукописного ввода, вы также можете обратиться к моей предыдущей серии курсов:cxytiandi.com/course/5

Секрет жетона Шаолиня

Аутентификация по токену — один из основных текущих методов аутентификации.Самым большим преимуществом токена является то, что он не имеет состояния и не требует хранения информации о сеансе. То есть через Токен можно узнать, к кому в данный момент обращается пользователь, для его получения не нужно заходить в память веб-контейнера, и не нужно заходить в хранилище централизованного управления сессии, чтобы получить его.

Есть много способов сгенерировать токен, вы можете самостоятельно определить фиксированный формат, например, он содержит идентификатор пользователя, имя пользователя и другую информацию. Вы также можете использовать текущий основной метод JWT.

JWT (JSON Web Token) — это открытый стандарт на основе JSON для доставки утверждений в среде веб-приложений. Утверждения JWT обычно используются для передачи информации об удостоверении пользователя, прошедшей проверку подлинности, между поставщиками удостоверений и поставщиками услуг для получения ресурсов с серверов ресурсов.

Например, когда пользователь входит в систему, основная идея заключается в том, что пользователь предоставляет имя пользователя и пароль серверу аутентификации, а сервер проверяет легитимность информации, предоставленной пользователем; если проверка прошла успешно, он сгенерирует и вернуть токен, а затем запросить у пользователя этот токен, сервер может получить идентифицирующую информацию для этого запроса.

JWT состоит из трех частей,

  • Первая часть — заголовок (Header);
  • Вторая часть — это тело сообщения (Payload);
  • Третья часть — подпись.

Формат токена, сгенерированный JWT:

token = encodeBase64(header) + '.' + encodeBase64(payload) + '.' + encodeBase64(signature)

Информация в заголовке обычно состоит из двух частей: тип токена и используемый алгоритм подписи, например следующий код:

{ "alg": "HS256", "typ": "JWT" }

Тело сообщения может содержать некоторую информацию, необходимую приложению, например идентификатор пользователя, код выглядит следующим образом:

{ "id": "1001", "name": "yinjihuan"}

Подпись используется для определения того, было ли сообщение подделано на пути передачи, чтобы обеспечить безопасность данных.Формат выглядит следующим образом:

HMACSHA256( base64UrlEncode(header)  + "." +  base64UrlEncode(payload), secret)

Из этих трех частей состоит наш веб-токен JSON.

Как использовать, пожалуйста, обратитесь к Github:github.com/jwtk/jjwt

图片
картина

Как показано на рисунке выше: после того, как запрос достигнет Tomcat, вы можете вызвать отдельную службу Token для создания Token или вы можете инкапсулировать логику создания Token в jar-пакет для использования. Следует отметить, что если используется встроенный метод, конфигурация шифрования соответствующего Токена должна быть согласованной, иначе проверка завершится неудачно.

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

Токен — это зашифрованная строка, содержащая информацию о пользователе, алгоритм шифрования и срок действия. Если время истечения установлено как долгое, это означает, что его можно использовать до истечения срока действия.

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

Об авторе: Инь Цзихуань, энтузиаст простых технологий, автор книг «Микросервисы Spring Cloud — технология полного стека и анализ конкретных случаев», «Практическое и продвинутое введение в микросервисы Spring Cloud», официальный аккаунт.обезьяний мирспонсор.

Я собрал очень всесторонние учебные материалы, заинтересованные могут искать микро-канал »обезьяний мир", ключевое слово в ответе"учебные материалы«Получите Spring Cloud, Spring Cloud Alibaba, подтаблицу подбазы данных Sharding-JDBC, структуру планирования задач XXL-JOB, MongoDB, сканеры и другую связанную информацию, которую я разобрал.