SpringMVC oracleを使用してセッション共有を構成

14033 ワード

簡単に述べる
開発はスタンドアロンプロジェクトであるが,配置負荷が均衡しているクラスタでは問題が発生し,アカウントを用いてログインしてからホームページに戻る.
負荷等化構成のジャンプはアクセスのたびにサービスが切り替わるため、Aマシンにログインした後、再びBマシンにアクセスしてログイン状態のあるセッションが見つからず、私のフィルタにはログインしないとトップページにジャンプするように構成されているので、Bマシンでトップページにジャンプして、ログインに失敗し続けます.解決策はセッション共有を構成することであり、ほとんどのセッション共有は使用されているRedisしているが、プロジェクトアーキテクチャの複雑さを増やさないという考えから、自身のプロジェクトデータベースを使用している–oracle.
Springが提供するセッション共有スキームを使用した、spring-session.spring-sessionのGithubアドレス:https://github.com/spring-projects/spring-session
データベーステーブル
JDBCを使用してセッション共有を行うには、対応するライブラリにテーブルを追加する必要があります.各ライブラリの対応するテーブル情報が含まれています.参考にしてください.https://github.com/spring-projects/spring-session/tree/master/spring-session-jdbc/src/main/resources/org/springframework/session/jdbc
ここでは2.xバージョンのsqlですが、1.xバージョンではPRIMARY_IDフィールドがない場合は、次のmaven依存で対応するバージョンを選択します.そうしないと、エラーが発生します.
CREATE TABLE SPRING_SESSION (
   PRIMARY_ID CHAR(36) NOT NULL,
   SESSION_ID CHAR(36) NOT NULL,
   CREATION_TIME NUMBER(19,0) NOT NULL,
   LAST_ACCESS_TIME NUMBER(19,0) NOT NULL,
   MAX_INACTIVE_INTERVAL NUMBER(10,0) NOT NULL,
   EXPIRY_TIME NUMBER(19,0) NOT NULL,
   PRINCIPAL_NAME VARCHAR2(100 CHAR),
   CONSTRAINT SPRING_SESSION_PK PRIMARY KEY (PRIMARY_ID)
   );

   CREATE UNIQUE INDEX SPRING_SESSION_IX1 ON SPRING_SESSION (SESSION_ID);
   CREATE INDEX SPRING_SESSION_IX2 ON SPRING_SESSION (EXPIRY_TIME);
   CREATE INDEX SPRING_SESSION_IX3 ON SPRING_SESSION (PRINCIPAL_NAME);

   CREATE TABLE SPRING_SESSION_ATTRIBUTES (
   	SESSION_PRIMARY_ID CHAR(36) NOT NULL,
   	ATTRIBUTE_NAME VARCHAR2(200 CHAR) NOT NULL,
   	ATTRIBUTE_BYTES BLOB NOT NULL,
   	CONSTRAINT SPRING_SESSION_ATTRIBUTES_PK PRIMARY KEY (SESSION_PRIMARY_ID, ATTRIBUTE_NAME),
   	CONSTRAINT SPRING_SESSION_ATTRIBUTES_FK FOREIGN KEY (SESSION_PRIMARY_ID) REFERENCES SPRING_SESSION(PRIMARY_ID) ON DELETE CASCADE
   );


Maven依存
ここでは2.xバージョンの依存が見つかり、mavenがない場合は、spring-jdbc、spring-session-core、spring-contextを導入します.
 <dependency>
    <groupId>org.springframework.sessiongroupId>
    <artifactId>spring-session-jdbcartifactId>
    <version>2.0.2.RELEASEversion>
 dependency>

アプリケーション.xml構成
<context:annotation-config/>
<bean class="org.springframework.session.jdbc.config.annotation.web.http.JdbcHttpSessionConfiguration">
       <property name="tableName" value="spring_session"/>
       <property name="maxInactiveIntervalInSeconds" value="1800"/>
 bean>

<bean id="transactionManager"
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
       
       <property name="dataSource" ref="dataSource" />
 bean>

web.xml
Springセッションは、1つのfilterをカスタマイズすることにより、filterロールチェーンを介して自己定義request置換httpservletrequestを使用し、自己httpsessionを使用する.Filterを配置して、彼を一番前に置いて、優先的に実行させます.
   <filter>
       <filter-name>springSessionRepositoryFilterfilter-name>
       <filter-class>org.springframework.web.filter.DelegatingFilterProxyfilter-class>
   filter>
   <filter-mapping>
       <filter-name>springSessionRepositoryFilterfilter-name>
       <url-pattern>/*url-pattern>
   filter-mapping>

まとめ
整和共有セッションステップ:データベーステーブルを追加し、依存を追加し、springのxmlを構成し、フィルタを追加してrequest取得spring-session-jdbcsessionを追加します.
統合後、プロジェクトに登録し、データベースのSPRING_SESSIONSPRING_SESSION_ATTRIBUTESテーブルに該当する情報を表示することができますが、session生存時間も元と同じで、他のロジックには影響しません.
リファレンス
公式ドキュメントXML構成spring session jdbc実装session共有