2017-04-30 21 views
0

木曜日(2017-04-26)に、Authenticator JSFページを使用してアプリケーションにログインしたときに次のエラーが発生しました。なぜChrome 58.0.3029.81(64ビット)はログイン時にViewExpiredExceptionを引き起こしますか?

[#| 2017-04-30T15:18:51.649から0500 | WARNING | GlassFishの 4.1 | javax.enterprise.web | _ThreadID = 30; _ThreadName = HTTPリスナー-1(2); _ TimeMillis = 1493583531649; _LevelValue = StandardWrapperValveは、[顔サーブレット]:サーブレットが例外をスローした顔 サーブレット用のServlet.service() javax.faces.application.ViewExpiredException: のviewId:/security/Authenticator.xhtml - ビュー /security/Authenticator.xhtml復元できませんでした。 com.sun.faces.lifecycle.Phase.doPhaseで com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:212)

(Phase.java:101)で

でCOM com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)

マイAuthenicatorで.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:123)

。 xhtmlページはAuthenticator.javaクラスによってサポートされています。次のヘッダーにi。私の研究の間に

@Named 
@ViewScoped 
public class Authenticator implements Serializable { 

、私は次のことを発見した:

  • 私は1時間のGlassFish 4.1.2サーバーを実行しているコンピュータを再起動した後、クロム58.0.3029.81を使用して自分のアプリケーションにログインすることができています。私がログオフすると、今後のすべてのログイン試行で上記のエラーが発生します。 (これは奇妙なものです)
  • 私はインターネットエクスプローラでログインできます
  • 58.0.3029.81より古いバージョンのChromeを使用してログインできます。
  • 私は、サーバーからクライアントへの私のweb.xmlファイルでjavax.faces.STATE_SAVING_METHOD変数を変更した場合、私はクローム58.0.3029.81を使用してログインすることができ、私のAndroidの電話
  • にクローム57.0.2987.132を使用してログインすることができます。

なぜChrome 58.0.3029.81がAuthenticatorビューを強制終了し、ViewExpiredExceptionが発生するのですか?

リクエストに応じて、ネットワークのトラフィックを分析し、Chrome 57.0.2987.133よりもAuthenticator.xhtmlの表示プロセス中にChrome 58.0.3029.81が2つの追加のGetリクエストを送信することを確認しました。

クローム57:

  • GET /webapp/security/Authenticator.xhtml HTTP/1.1
  • GET/webappの/セキュリティ/ RES_NOT_FOUND HTTP/1.1
  • GET/webappの/セキュリティ/ RES_NOT_FOUND HTTP/1.1
  • POST /webapp/security/Authenticator.xhtml HTTP/1。1

クローム58:

  • GET /webapp/security/Authenticator.xhtml HTTP/1.1
  • GET/webappの/セキュリティ/ RES_NOT_FOUND HTTP/1.1
  • GET/webappの/セキュリティ/ RES_NOT_FOUND HTTP/1.1
  • GET/webappの/セキュリティ/ RES_NOT_FOUND HTTP/1.1
  • GET/webappの/セキュリティ/ RES_NOT_FOUND HTTP/1.1
  • POST /webapp/security/Authenticator.xhtml HTTP/1.1

クロームRES_NOT_FOUNDが、私は2つの余分を送信することは悪いことであれば知っているが、それはありません最初の場所で取得する送信理由を私は知らないので、 GlassFish 4.1.2がAuthenticatorビューに再接続できないことに関連しているようです。

これはAuthenticator.xhtmlページの問題であるか、Chrome 58/GlassFish 4.1.2の問題ですか?

次はポスト情報の比較である:私が見る唯一の違いは、「クローム57が追加ということである

クローム57ポスト

POST /webapp/security/Authenticator.xhtml HTTP/1.1 
Host: localhost:8080 
Connection: keep-alive 
Content-Length: 205 
Cache-Control: max-age=0 
Origin: http://localhost:8081 
Upgrade-Insecure-Requests: 1 
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 
Content-Type: application/x-www-form-urlencoded 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
Referer: http://localhost:8081/webapp/security/Authenticator.xhtml 
Accept-Encoding: gzip, deflate, br 
Accept-Language: en-US,en;q=0.8 
Cookie: JSESSIONID=4067aa3d0df7f2bc26b8200a8c4a; 
modena_expandeditems=j_idt32%3Awelcome-menu 

authentication-form=authentication-form&authentication-form%3AuserName=XXX&authentication-form%3Apassword=XXX&authentication-form%3Aj_idt93=&javax.faces.ViewState=-4577625721740212982%3A4298605796688550126 

クローム58ポスト

POST /webapp/security/Authenticator.xhtml HTTP/1.1 
Host: localhost:8080 
Connection: keep-alive 
Content-Length: 204 
Cache-Control: max-age=0 
Origin: http://172.24.1.125:8081 
Upgrade-Insecure-Requests: 1 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36 
Content-Type: application/x-www-form-urlencoded 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
Referer: http://172.24.1.125:8081/webapp/security/Authenticator.xhtml 
Accept-Encoding: gzip, deflate 
Accept-Language: en-US,en;q=0.8 
Cookie: JSESSIONID=4089ef02f0bca32d331de1f5404f 

authentication-form=authentication-form&authentication-form%3AuserName=XXX&authentication-form%3Apassword=XXX&authentication-form%3Aj_idt93=&javax.faces.ViewState=3383766421781608154%3A6418504070036764787 

; JSESSIONIDの後ろに「modena_expandeditems = j_idt32%3Awelcome-menu」と表示されます。

+0

ネットワークトラフィックをデバッグして、違いを見つけてください... – Kukeltje

+0

唯一の明らかな違いは、Chrome 58.0.3029.81がAuthenticator.xhtmlの表示中にChrome 57.0.2987.133より2つの追加取得リクエストを送信することです。詳細を表示するために質問を編集しました。 –

+0

投稿の違いを見てください。セッションIDクッキーがありませんか?その場合は、ビューの有効期限が切れた例外が説明され、クライアント側の状態を切り替えると問題は発生しません。 – Kukeltje

答えて

1

これは、モデナとPrimeFaces 6と呼ばれるPrimeFacesプレミアムテーマ2.1.1の問題であることが判明しました.HTTP分析中に、Chrome 57が2つのRES_NOT_FOUNDリクエストを送信し、Chrome 58が4つのRES_NOT_FOUNDリクエストを送信しました。次PrimeFacesモデナフォーラムの問題に文書化されているようこれはモデナ2.1.1の既知の問題だった:

PrimeFaces Modena Forum Issue

各RES_NOT_FOUND要求時には、JSESSIONIDが変わってしまうとChrome 58でさらに2変更についての何かが壊れますJSESSIONとViewStateの間のリンク。

Modenaをバージョン2.1.3にアップグレードすると、RES_NOT_FOUND要求がすべて削除され、ViewExpiredの問題が解決されました。

+0

うわー....すごく魅力的です。これを期待していないだろう。なぜこのRES_NOT_FOUNDが最終的にそれを壊すのか不思議に思っています...キャッシュされている「ビューの数」がちょっと...または...おそらく@BalusCにはある程度の洞察があります – Kukeltje

関連する問題