現在この投稿に設定したタグの技術を使ってWebアプリケーションの実装をしています。
質問があるのですが、
結論から言うと、
@Scope("session")を設定したセッションクラスをtimeoutで期限切れにするにはどうしたらいいでしょうか?
現在application.ymlにtimeoutを2秒で設定しているのですが、効いてくれません。一応2箇所設定したのですがそれでもダメでした。
2秒待っても10分以上待ってもセッションは残り続けているのです。
設定方法やセッションタイムアウトの方法が違うのでしょうか?
application.ymlの設定方法やリファレンスも読んだのですがわかりません。
もし分かる方がいれば宜しくお願い致します。
application.yml
1spring: 2//省略 3 session: 4 store-type: jdbc 5 timeout: 2 6server: 7 port: 8080 8 servlet: 9 context-path: / 10 session: 11 timeout: 2
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/12/20 10:15
回答1件
0
ベストアンサー
セッション管理をしているコードの書き方が単純に正しくないのではないかと思うんですが、
application.yml にて
yml
1spring: 2 session: 3 timeout: 5
とした状態で、
java
1import javax.servlet.http.HttpSession; 2 3import org.springframework.stereotype.Controller; 4import org.springframework.web.bind.annotation.GetMapping; 5import org.springframework.web.servlet.ModelAndView; 6 7import com.github.apz.springsample.controller.model.SessionModel; 8 9import lombok.RequiredArgsConstructor; 10 11@Controller 12@RequiredArgsConstructor 13public class SampleController { 14 15 private final SessionModel sessionModel; 16 17 @GetMapping("") 18 public ModelAndView display(ModelAndView mnv) { 19 mnv.setViewName("index"); 20 sessionModel.setValue("a"); 21 return mnv; 22 } 23 24 @GetMapping("set") 25 public ModelAndView setSession(ModelAndView mnv, HttpSession session) { 26 session.setAttribute("sessionModel", sessionModel); 27 mnv.setViewName("index"); 28 return mnv; 29 } 30}
@Scope
を宣言したSpring管理Beanは、
java
1import static org.springframework.web.context.WebApplicationContext.*; 2 3import java.io.Serializable; 4 5import org.springframework.context.annotation.Scope; 6import org.springframework.context.annotation.ScopedProxyMode; 7import org.springframework.stereotype.Component; 8 9import lombok.Data; 10 11@Component 12@Scope(scopeName=SCOPE_SESSION, proxyMode=ScopedProxyMode.TARGET_CLASS) 13@Data 14public class SessionModel implements Serializable{ 15 private String value; 16}
html
1<!DOCTYPE html> 2<html xmlns:th="http://www.thymeleaf.org"> 3<head> 4<meta charset="UTF-8" /> 5</head> 6<body> 7<form th:action="@{/set}"> 8 <input type="submit" value="セッション設定"> 9</form> 10 11<form th:action="@{/}"> 12 <input type="submit" value="表示のみ"> 13</form> 14<div th:text="${session.sessionModel}"></div> 15</script> 16</body> 17</html>
/set へリクエストした5秒以内に / へリクエストすれば「SessionModel(value=a)」表示され、5秒たった後に / へリクエストすると、何も出力されません。
HttpSessionに格納している箇所の実装を確認されてみると良いでしょうか。
投稿2018/12/20 12:37
総合スコア12011
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/21 02:28
2018/12/21 02:28
2018/12/21 02:29
2018/12/21 02:31
2018/12/21 06:01
2018/12/21 06:32
2018/12/21 06:33
2018/12/21 06:35
2018/12/21 09:27
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。