Play 2.4(Java):在IE11中发布表单返回Unauthorized,在Chrome

时间:2016-01-27 20:01:43

标签: internet-explorer-11 playframework-2.4

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

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

我使用动作组合授权和Play提供的自动csrf过滤器,这些过滤器在游戏2.3下完美运行。他们也使用Chrome浏览器中的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中有这样的行为?请帮忙。

1 个答案:

答案 0 :(得分:0)

首先我使用this implementation of the global CSRF filter,但它给了我上面列出的问题。

然后我尝试this implementation(用csrf替换gzip),问题似乎已经消失了!我认为拥有最后的财产可以解决问题。