前提・実現したいこと
Struts2を使ってwar形式のWEBアプリを作っています。
作成したwarをGlasfishにデプロイしたら、
セッション情報が引き継がれず、アプリが正しく動作しません。
GlassFish側の不具合なのか、設定で足りないものがあるのか、
もしくは実装すべき内容が足りてないのか判別がつかないので、
何が悪いのか教えてもらえませんか?
デプロイ環境
- CentOS Linux release 7.7.1908 (Core)
- GlassFish 4.1
Glassfish 4.1 は公式サイト https://javaee.github.io/glassfish/download からダウンロードしたものを
ほぼカスタマイズ無しで起動したもの
発生している問題・エラーメッセージ
- ログイン画面で入力した情報をセッションに保存しても、他の画面でセッションから情報を取得できない
- 画面を再読み込みするたびにセッションIDが新しいものになっている(毎回セッションが新規作成されている?)
試したこと
- 開発環境の Tomcat9 では正しくセッションが引き継がれる
- Tomcat 7.0.68 にデプロイした場合は正しくセッションが引き継がれた
- GlassFish 4.1.2 にもデプロイしてみたが同じ現象が発生した
該当のソースコード
https://github.com/blhsrwznrghfzpr/glassfish-test
/glassfish-test/login
にアクセスしてログインボタンを押す
↓
- ログで
userInfo is null
が出力されてしまう - 再読み込みのたびにセッションIDが変わる
java
1public class Menu extends ActionSupport implements SessionAware, ServletRequestAware { 2 3 private static final Log log = LogFactory.getLog(Login.class); 4 5 private static final long serialVersionUID = 1L; 6 // セッション情報 7 private Map<String, Object> session; 8 9 private HttpServletRequest request; 10 11 // ユーザー情報 12 private UserInfoBean userInfo = null; 13 14 private String sessionId = null; 15 16 @Override 17 public String execute() throws Exception { 18 log.info("メニュー開始"); 19 20 userInfo = (UserInfoBean) session.get(Const.USER_INFO); 21 if (userInfo == null) { 22 log.info("userInfo is null"); 23 } else { 24 log.info("ユーザーコード1: " + userInfo.getCode()); 25 log.info("ユーザー名1: " + userInfo.getName()); 26 } 27 28 final HttpSession session = request.getSession(); 29 sessionId = session.getId(); 30 log.info("セッションID: " + sessionId); 31 userInfo = (UserInfoBean) session.getAttribute(Const.USER_INFO); 32 if (userInfo == null) { 33 log.info("userInfo is null"); 34 } else { 35 log.info("ユーザーコード2: " + userInfo.getCode()); 36 log.info("ユーザー名2: " + userInfo.getName()); 37 } 38 39 return SUCCESS; 40 } 41 42 @Override 43 public void setSession(Map<String, Object> session) { 44 this.session = session; 45 } 46 47 @Override 48 public void setServletRequest(HttpServletRequest request) { 49 this.request = request; 50 } 51 52 public UserInfoBean getUserInfo() { 53 return userInfo; 54 } 55 56 public void setUserInfo(UserInfoBean userInfo) { 57 this.userInfo = userInfo; 58 } 59 60 public String getSessionId() { 61 return sessionId; 62 } 63 64}

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。