SpringMVC oracleを使用してセッション共有を構成
14033 ワード
簡単に述べる
開発はスタンドアロンプロジェクトであるが,配置負荷が均衡しているクラスタでは問題が発生し,アカウントを用いてログインしてからホームページに戻る.
負荷等化構成のジャンプはアクセスのたびにサービスが切り替わるため、Aマシンにログインした後、再びBマシンにアクセスしてログイン状態のあるセッションが見つからず、私のフィルタにはログインしないとトップページにジャンプするように構成されているので、Bマシンでトップページにジャンプして、ログインに失敗し続けます.解決策はセッション共有を構成することであり、ほとんどのセッション共有は使用されている
Springが提供するセッション共有スキームを使用した、
データベーステーブル
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バージョンでは
Maven依存
ここでは2.xバージョンの依存が見つかり、mavenがない場合は、spring-jdbc、spring-session-core、spring-contextを導入します.
アプリケーション.xml構成
web.xml
Springセッションは、1つのfilterをカスタマイズすることにより、filterロールチェーンを介して自己定義
まとめ
整和共有セッションステップ:データベーステーブルを追加し、依存を追加し、springのxmlを構成し、フィルタを追加して
統合後、プロジェクトに登録し、データベースの
リファレンス
公式ドキュメントXML構成spring session jdbc実装session共有
開発はスタンドアロンプロジェクトであるが,配置負荷が均衡しているクラスタでは問題が発生し,アカウントを用いてログインしてからホームページに戻る.
負荷等化構成のジャンプはアクセスのたびにサービスが切り替わるため、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-jdbc
のsession
を追加します.統合後、プロジェクトに登録し、データベースの
SPRING_SESSION
SPRING_SESSION_ATTRIBUTES
テーブルに該当する情報を表示することができますが、session
生存時間も元と同じで、他のロジックには影響しません.リファレンス
公式ドキュメントXML構成spring session jdbc実装session共有