[TEEDA-381] doOnceでTokenのベリファイに失敗した場合、ポストバック時の挙動がおかしい Created: 2007-09-20  Updated: 2007-09-20  Resolved: 2007-09-20

Status: Resolved
Project: Teeda
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0.11

Type: Bug Priority: Major
Reporter: shot Assignee: shot
Resolution: Fixed Votes: 0
Labels: None


 Description   

例えば以下のような遷移を行う.

A画面 サブミット→B画面 リンク→ C画面(1)(doOnce) ポストバック遷移→ C画面(2)

このような状況下で、C画面(2)からブラウザの戻るボタンで遷移して、
C画面(1)にて再度doOnceのボタンを押下した場合、B画面に遷移してしまう.

この原因はTokenのベリファイが失敗したときの挙動にある.
基本的にはRedirect元から探すのが正解だがポストバックでの遷移でのdoOnceだった場合は、
その画面に戻すのが正しい挙動である.



 Comments   
Comment by shot [ 2007-09-20 ]

修正しました.
下記のように、ポストバックを見るようにしました.

    public void broadcast(FacesEvent event) throws AbortProcessingException {
        if (TransactionTokenUtil.isDoOnce(getId())) {
            final FacesContext context = FacesContext.getCurrentInstance();
            if (TransactionTokenUtil.verify(context)) {
                super.broadcast(event);
            } else {
                final Map requestMap = context.getExternalContext()
                        .getRequestMap();
                if (PostbackUtil.isPostback(requestMap)) {
                    context.renderResponse();
                    return;
                }
                String path = RedirectScope.getRedirectingPath(context);
                if (path == null) {
                    path = RedirectScope.getRedirectedPath(context);
                }
                if (path != null) {
                    NavigationHandlerUtil.assertNotAlreadyRedirect(context);
                    NavigationHandlerUtil.redirect(context, path);
                }
                context.renderResponse();
            }
            return;
        }
        super.broadcast(event);
    }

Generated at Fri Apr 26 08:12:08 JST 2024 using Jira 9.15.0#9150000-sha1:9ead8528714127d8cfabf2446010d7e62c0a195c.