【问题标题】:Deadbolt - Access failure redirect is not workingDeadbolt - 访问失败重定向不起作用
【发布时间】:2013-05-20 16:37:09
【问题描述】:

我正在使用带有 Playframework 2.1 的 Deadbolt 2

我有一个公共页面,用户在该页面中单击一个 Action 按钮并调用一个 Controller 方法,该方法上有 @SubjectPresent 。如果用户未登录,我想将用户重定向到登录页面,然后在用户登录后执行方法调用。

我通过jsroutes调用控制器方法如下

function launchDemo(demoId){

    jsRoutes.controllers.DemoLaunchApplication.launchDemo(demoId).ajax({

      success: function(data, textStatus) {
        $("#result").html(data);
      },
      error: function(data) {
      alert("error");
          $("#result").html(data);
      }

    }) 
  }

我已经根据这里的项目示例设置了 deadbolt 2。(https://github.com/joscha/play-authenticate/tree/master/samples/java/play-authenticate-usage)

我在控制台中收到以下错误。

[error] application - Access to [/test/launch?testId=2] requires a subject, but no subject is present.
[warn] application - Deadbolt: Access failure on [/test/launch?testId=2]

在结果 div 中,正在显示登录页面。我想重定向到登录页面,登录后运行方法调用。

我确实尝试添加 statusCode 和 ajaxError,但响应头状态为 200,并且每次执行成功块时都会在结果 div 中显示登录表单。

【问题讨论】:

    标签: redirect playframework-2.0 deadbolt


    【解决方案1】:

    您似乎需要更改 DeadboltHandler 实现的 onAuthFailure。如果您从示例代码中复制了一个,它会返回一个 403。相反,您应该返回一个重定向到您的登录页面。

    【讨论】:

    • 史蒂夫,我已经注释掉了禁止,并将其设置为重定向-//返回禁止(“禁止”);返回重定向(PlayAuthenticate.getResolver().login());
    • 您确定您没有限制对登录页面的访问吗?
    • 我没有限制对登录页面的访问。当我正常获取请求时,例如:localhost:9000/project 页面被重定向到localhost:9000/login。在上述方法中,ajax 调用会产生一个 HTTP POST localhost:9000/launch/demo?id=1,它在内部被重定向为 HTTP 状态 303,然后登录页面 HTML 内容作为数据返回。
    猜你喜欢
    • 1970-01-01
    • 2013-05-28
    • 1970-01-01
    • 2017-02-21
    • 2017-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-04
    相关资源
    最近更新 更多