簡體   English   中英

Play Framework 2.X:使用onReqest處理並在Global.java中重定向

[英]Play Framework 2.X : Dealing w/ onReqest and redirect in Global.java

我是Play框架的新手。 我正在做一個基礎項目,現在正在做身份驗證功能。 我想將未經授權的用戶重定向到/ login路由。

我發現Global.java類使我可以控制整個項目中的動作,尤其是onRequest函數。 我正計划使用它來進行重定向。

我在網上搜索了幾種解決方案,但找不到可行的解決方案。

我的課:

import play.*;
import play.mvc.Action;
import play.mvc.*;
import play.mvc.Http.*;
import play.mvc.Result.*;
import play.libs.F.*;
import static play.mvc.Results.*;
import play.mvc.Http.Request;
import java.lang.reflect.Method;


public class Global extends GlobalSettings {
    @Override
    public Action onRequest(Request request, Method actionMethod) {

    //Check if the user is connected
    if (request.cookie("PLAY_SESSION") == null && !request.path().startsWith("/login")) {
        System.out.println("UNAUTHORIZED");
        return new Action.Simple() {
            @Override
            public Result call(Context ctx) throws Throwable {
                return redirect(controllers.routes.Application.index());
            }
        };
    }

    return super.onRequest(request, actionMethod);
   }
}

我發現了這個,但我不明白為什么要玩! 不想編譯:

error: <anonymous Global$1> is not abstract and does not override abstract method call(Context) in Action error: method does not override or implement a method from a supertype

我對Play並不隨意,而且我不太了解這個問題。 有人能幫助我嗎 ? 謝謝 !

我已經有一段時間沒有使用Play Framework了,但是我認為問題是在2.2版本中他們使Action可以返回Promise而不是Result。 因此,有您的問題。

檢查您匹配的Action.Simple.call()版本

Result call(Context ctx) throws Throwable

看到之間的區別

https://www.playframework.com/documentation/2.2.x/api/java/index.html https://www.playframework.com/documentation/2.1.x/api/java/index.html

(查看調用方法的返回類型)

編輯

我不確定這是否是最好的方法,但它是否應該起作用。

@Override
public F.Promise<Result> call(Context ctx) throws Throwable {
    return F.Promise.pure(redirect(controllers.routes.Application.index()));
}

F.Promise.pure()可用於將Result(或實現它的任何東西,例如Results.Status)轉換為Promise。

例如,ok()返回play.mvc.Results.Status:

F.Promise.pure(ok("[No Preview Available]"));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM