Рубрики
Без рубрики

Плагин Grails для весенней сессии (Часть 1)

В этом руководстве вы узнаете, как настроить и использовать плагин grails для весенней сессии в grails 2 x… С тегами grails, java, весенняя сессия, заводной.

Из этого туториала вы узнаете, как настроить и использовать плагин grails для весенней сессии в приложении grails 2x. Этот блог также будет охватывать различные хранилища данных, поддерживаемые в настоящее время этим плагином, а также сериализаторы для сериализации/десериализации вашей сессии в/из магазина.

Этот блог разделен на 3 раздела

  1. Вступление
  2. Установка
  3. Хранилище данных Redis

1. Вступление

Этот плагин grails поможет вам легко настроить Весеннюю сессию проект в вашем приложении grails.

Что такое Весенняя сессия?

Весенняя сессия – это проект сообщества Spring, который предоставляет API и реализации для управления информацией о сеансе пользователя. Это позволяет хранить сеанс пользователя в хранилище данных, таком как Redis , MongoDB , JDBC , Хейзелкаст , Драгоценный огонь и т.д. Вы можете легко переключаться с одного хранилища данных на другое.

Насколько это лучше, чем традиционный способ хранения сеанса пользователя? Что ж, в весеннюю сессию вам не нужно добавлять какую-либо банку внутри контейнера сервлета (tomcat, jetty и т. Д.), Что означает отсутствие зависимости от конкретного контейнера. API, связанный с управлением сеансами (jar), будет находиться внутри самого приложения. Таким образом, один контейнер может содержать несколько приложений, которые могут использовать различные типы хранилища данных для хранения сеанса пользователя. Что также помогает при переходе с одного контейнера на другой или переключении на другого поставщика (например, Tomcat на Jetty).

Другие функции, предлагаемые весенней сессией:

  • Кластерные сеансы – Тривиально поддерживать кластерные сеансы без привязки к конкретному решению для контейнера приложения.
  • Несколько сеансов браузера – Весенняя сессия поддерживает управление сеансами нескольких пользователей в одном экземпляре браузера (т. Е. Несколькими аутентифицированными учетными записями, аналогичными Google).
  • RESTful API – Весенняя сессия позволяет указывать идентификаторы сеансов в заголовках для работы с RESTful API.
  • Поддержка WebSocket – обеспечивает возможность поддерживать HttpSession при получении сообщений WebSocket.

С помощью этого плагина вы можете реализовать вышеуказанные функции в своем приложении grails.

Примечание: Проект весенней сессии поддерживает различные хранилища данных, которые еще не настроены в этом плагине. Эти хранилища данных находятся в стадии разработки. Если вы хотите внести свой вклад в добавление поддержки хранилища данных, просто раскошелитесь на меня на GitHub .

2. Установка

Настройка плагина очень проста. Если вы используете grails 2x, добавьте следующий код в свой BuildConfig.заводной внутри плагинов блок

plugins {
    ...
    compile "org.grails.plugins:spring-session:2.0.0-RC1"
}

Примечание: По умолчанию плагин будет использовать Redis в качестве хранилища данных по умолчанию. В настоящее время он поддерживает Redis, Mongo и JDBC store для сохранения сеанса.

В настоящее время этот плагин поддерживает 3 хранилища данных.

  1. Редис
  2. Монго
  3. интерфейс jdbc

Этот блог будет посвящен Redis хранилищу данных. Другие хранилища данных будут рассмотрены в следующем блоге.

1. Редис

Первоначально проект весенней сессии поддерживал только хранилище данных Redis. Таким образом, Redis является хранилищем данных по умолчанию для этого плагина. Чтобы изменить хранилище данных, вам необходимо установить следующее свойство в вашем файле Config.groovy .

springsession.sessionStore=SessionStore.REDIS

Убедитесь, что сервер Redis запущен в вашей системе. Чтобы убедиться, что плагин работает, просто создайте фиктивный контроллер в своем приложении. Допустим, вы создали контроллер под названием HomeController.

package demo

class HomeController {

    def index() {
        render "Hello from home controller"
    }
}

Теперь запустите приложение grails, и как только ваше приложение будет запущено, выполните следующую команду на терминале.

curl -c - localhost:8080/g2ss/home/index

#Output
#HttpOnly_localhost FALSE /g2ss/ FALSE 0 SESSION 9c3796b4-90d1-4f51-b340-4dc857f6cdd2

Вы заметите ответ с именем файла cookie сеанса СЕАНС с его значением 9c3796b4-90d1-4f51-b340-4dc857f6cdd2 . Ваше здоровье!!! Ваш плагин успешно настроен.

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

springsession.strategy.cookie.name="SPRING_SESSION"

Давайте рассмотрим некоторые свойства и их влияние на плагин.

Общие свойства
springsession.maxInactiveIntervalInSeconds=1800 // Session timeout. default is 1800 seconds
springsession.sessionStore=SessionStore.REDIS // Select session store. Default is REDIS
springsession.defaultSerializer=Serializer.JDK // Serialization mechanism, currently supports JDK & JSON Based. Default is JDK
springsession.strategy.defaultStrategy=SessionStrategy.COOKIE // session tracking mechanism. Default is COOKIE also suports HEADER
springsession.strategy.cookie.name="SESSION" // session cookie name. Default is SESSION
springsession.strategy.httpHeader.headerName="x-auth-token" // session header token name. Default is x-auth-token
springsession.allow.persist.mutable=false // check https://github.com/jeetmp3/spring-session/issues/5 for more detail. Default value is false.
Redis хранит определенные свойства
springsession.redis.connectionFactory.hostName="localhost" // Redis server hostname. default is localhost
springsession.redis.connectionFactory.port=6397 // Redis server port. default is 6397
springsession.redis.connectionFactory.timeout=2000 // Redis server connection timeout. default is 2000
springsession.redis.connectionFactory.usePool=true // To use connection pool. default is true
springsession.redis.connectionFactory.dbIndex=0 // Database number. Default is 0
springsession.redis.connectionFactory.password=null // Redis server password. Default is null
springsession.redis.connectionFactory.convertPipelineAndTxResults=true // Specifies if pipelined results should be converted to the expected data type. Default is true

springsession.redis.poolConfig.maxTotal=8 // Pool config maximum active connections. Default is 8
springsession.redis.poolConfig.maxIdle=8 // Pool config maximum idle connections. Default is 8
springsession.redis.poolConfig.minIdle=0 // Pool config minimum active connections. Default is 0

springsession.redis.sentinel.master=null // Redis sentinal master node name. Default is null
springsession.redis.sentinel.nodes=[] // List of Map sentinal nodes. e.g. [[host: 'localhost', port: 6379], [host: '', port: 0] ]. Default is blank
springsession.redis.sentinel.password=null // Redis sentinal password. Default is null
springsession.redis.sentinel.timeout=2000 // Redis sentinal timeout. Default is 2000
Специфические свойства сериализации JSON
springsession.redis.jackson.modules = [] // List of Application Jackson modules. This plugin uses the Jackson library to JSON serialization.
Сериализация Json

По умолчанию этот плагин использует сериализацию Java. С этим типом сериализации существует большое ограничение, вам нужно пометить каждый класс @Serializable . Теперь подумайте о некоторых библиотечных классах, т. Е. о любом классе, который поставляется с библиотекой, и у вас нет исходного кода для этого. Что происходит, когда вы пытаетесь сериализовать этот класс?

java.io . Несериализуемое исключение Да, вы правы!!!!

В реальных приложениях вы хотели бы использовать библиотеки как можно больше, потому что вы не хотите писать классы/подпрограммы, которые уже написаны, почему бы не использовать их повторно.

Здесь начинается сериализация JSON. При сериализации JSON вам не нужно указывать @Serializable в классах. Чтобы использовать сериализацию JSON в плагине, вам необходимо изменить свойство

springsession.defaultSerializer = Serializer.JSON

Вот и все!!!

Сериализация JSON будет работать идеально, пока в вашем классе не будет конструктора по умолчанию. Но если у какого-либо класса нет конструктора по умолчанию, вам нужно будет добавить классы mixin или сериализатор/десериализатор для этого класса и класс модуля Джексона. Это блог, который поможет вам десериализовать json с помощью параметризованного конструктора Java.

Давайте возьмем пример. У меня есть свой класс пользователя, как указано ниже

package demo;

import java.io.Serializable;

/**
 * @author Jitendra Singh.
 */
public class User {

    private String name;

    public User(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                '}';
    }
}

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

1. Создать микс для пользователя
package demo;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;

/**
 * @author Jitendra Singh.
 */
public class UserMixin {
    private String name;

    @JsonCreator
    public UserMixin(@JsonProperty("name") String name) {

    }
}
2. Создайте класс модуля для регистрации смешивания
package demo;

import com.fasterxml.jackson.core.Version;
import com.fasterxml.jackson.databind.Module;

/**
 * @author Jitendra Singh.
 */
public class SimpleModule extends Module {
    @Override
    public String getModuleName() {
        return "Simple";
    }

    @Override
    public Version version() {
        return Version.unknownVersion();
    }

    @Override
    public void setupModule(SetupContext setupContext) {
        setupContext.setMixInAnnotations(User.class, UserMixin.class);
    }
}
3. Зарегистрируйте мой класс модуля с помощью плагина весенней сессии
springsession.redis.jackson.modules = ['demo.SimpleModule']

Это оно. С тобой покончено.

В следующем посте я объясню хранилище данных Mongo. Счастливого кодирования, Ура!!!

Оригинал: “https://dev.to/jeetmp3/spring-session-grails-plugin-part-1-2gc4”