一般社団法人 全国個人事業主支援協会

COLUMN コラム

  • Springでセッションタイムアウトを実装する方法

こんにちは。

Springフレームワークを使ってWebアプリケーションを開発していると、ページのタイムアウト処理が必要になることがあります。
特に、セッション管理が重要なアプリケーションでは、ユーザーのセッションがタイムアウトした際の適切な処理が欠かせません。
今回は、Java、JavaScript、HTMLを使って、Springでページのタイムアウト処理を実装する方法について解説します。

概要

Webアプリケーションでは、ユーザーが一定時間操作しない場合にセッションをタイムアウトさせることで、セキュリティを強化します。Springフレームワークを使って、セッションタイムアウトの設定とタイムアウト後の処理を実装します。

セッションタイムアウトの設定

まず、セッションのタイムアウト時間を設定します。Spring Bootの場合、application.propertiesファイルに以下のように設定します:


# セッションのタイムアウト時間を設定(秒単位)
server.servlet.session.timeout=1800

これにより、ユーザーが30分間(1800秒)操作しないとセッションがタイムアウトします。

タイムアウト後の処理

次に、セッションタイムアウト後の処理を実装します。ユーザーがセッションタイムアウトした際に、特定のページにリダイレクトするように設定します。Spring Securityを使用している場合、SecurityConfigクラスに以下の設定を追加します:


import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .sessionManagement()
                .invalidSessionUrl("/session-timeout")  // セッションタイムアウト時のリダイレクト先
                .and()
            .authorizeRequests()
                .anyRequest().authenticated();
    }
}

これにより、セッションが無効になった際に、ユーザーは「/session-timeout」URLにリダイレクトされます。

タイムアウトページの作成

最後に、タイムアウト後に表示するページを作成します。以下は、シンプルなタイムアウトページの例です:


<!DOCTYPE html>
<html>
<head>
    <title>セッションタイムアウト</title>
</head>
<body>
    <h1>セッションがタイムアウトしました</h1>
    <p>再度ログインしてください。</p>
    <a href="/login">ログインページに戻る</a>
</body>
</html>

このページでは、セッションタイムアウトが発生した際にユーザーに通知し、再ログインを促します。

タイムアウトを検出するクライアントサイドの実装

セッションタイムアウトを検出するために、JavaScriptを使ってクライアントサイドでの処理を追加することも可能です。以下の例では、一定時間操作がない場合にアラートを表示し、ページをリロードします:


<script>
let timeout;

function resetTimeout() {
    clearTimeout(timeout);
    timeout = setTimeout(() => {
        alert('セッションがタイムアウトしました。ページをリロードします。');
        location.reload();
    }, 1800000);  // 30分(1800秒)
}

window.onload = resetTimeout;
document.onmousemove = resetTimeout;
document.onkeypress = resetTimeout;
</script>

このスクリプトは、ユーザーの操作(マウスの動きやキーの押下)があるたびにタイムアウトをリセットし、30分間操作がない場合にページをリロードします。

実際の活用例

私のプロジェクトでも、Springを使ってセッションタイムアウト処理を実装しました。
ユーザーが一定時間操作しないとセッションがタイムアウトし、セキュリティが強化されました。
皆さんもぜひ試してみてください。

The following two tabs change content below.

Y.Ryuji

未経験から3年間IT企業に勤めたのち、2023年1月からフリーランスに転身しました。

この記事をシェアする

  • Twitterでシェア
  • Facebookでシェア
  • LINEでシェア