Play 2.4 (Java) : 发布表单 returns 在 IE11 中未经授权,在 Chrome 中有效

Play 2.4 (Java) : posting a form returns Unauthorized in IE11, works in Chrome

我刚刚使用激活器 1.3.7 迁移到 Play 2.4.6。

我有一个处理表单的安全控制器。表单提交在 Chrome 中运行良好,但在 IE11 中,http POST 结果是 403 代码(未授权)。我不明白为什么会这样。这是一个间歇性问题:连接同一用户时,有时 post 有效,有时无效。我的应用程序中的其他 posts(在其他页面上)工作正常。 有人可以帮忙吗?

我使用 action composition 进行授权和 Play 提供的自动 csrf 过滤器,它们在 play 2.3 下都运行良好。他们还在 Chrome 中使用 play 2.4.6,我遵循了 CSRF configuration 的步骤...由于我的用户群,我需要让它在 IE 中工作。

这是控制器:

@play.mvc.Security.Authenticated(Secured.class)
@Authorize(minLevel=PermissionLevel.VENDOR)
public class SoumRapideFlexible extends Controller {
...
  public static Result save(){      
    Form<SoumFlex> boundForm = soumflexForm.bindFromRequest();

    if(boundForm.hasErrors()){          
        return badRequest(page.render(boundForm));
    }
    ... // else do stuff with the Soumflex object
  }
}

这是表格,精简到最基本的内容:

@(myForm: Form[SoumFlex])
@import helper._
<!DOCTYPE html>
<html>
<head>                              
    <script data-main="@routes.Assets.versioned("javascripts/main_soumflex")" 
src="@routes.Assets.versioned("lib/requirejs/require.js")"></script>              
</head>
<body>
    @form(routes.SoumRapideFlexible.save(), 'class -> "form-horizontal") {
        @CSRF.formField

        <div class="form-group">
            <label class="col-md-2 control-label" for="inputProjet">Projet</label>
            <div class="col-md-4">
            <input type="text" class="form-control" id="inputProjet" name="inputProjet" placeholder="Nom du projet" required>
            </div>
        </div>
        //... and many other form fields in similar fashion...

        <input type="submit" class="btn btn-primary" id="soumettreSoum" value="Save">                   
    </div> <!-- resumeSoum -->
    }   
</div>                               
</body>
</html>

好像有时用户凭据丢失或 csrf 令牌不正确...有人知道为什么我在 IE11 中会有这样的行为吗?请帮忙。

首先我使用了 this implementation of the global CSRF filter 但它给了我上述问题。

然后我尝试了 this implementation(用 csrf 替换 gzip),问题似乎已经消失了!我认为最后 属性 成功了。