正在运行的安全模块(1.2.4,如果相关)的行为是302重定向到登录页面。这对大多数网页来说都足够了。我有一些在AJAX调用中使用的路由。对于这些,我想在用户未经身份验证时返回401,而不是返回重定向。
如何在身份验证失败时自定义Play的功能?
答案 0 :(得分:1)
安全模块是最简单的Play模块之一。我将它视为一个起点或示例,您可以从中构建自己的,更复杂的身份验证实现。因此,我的建议是将模块的内容直接复制到项目中(从而基本上消除了实际的模块依赖性)。
然后,您可以根据需要对其进行修改 - 大多数逻辑都在一个名为Secure
的控制器中。例如,通过修改authenticate
方法可以轻松实现您描述的行为。请查看方法中的以下代码段 - 评论中的行已由我添加:
...
if(validation.hasErrors() || !allowed) {
flash.keep("url");
flash.error("secure.error");
params.flash();
// you can check if ("POST".equalsIgnoreCase(request.method)) here...
login();
}
...