簡體   English   中英

使用Play進行身份驗證! 2.4

[英]Authentication with Play! 2.4

我正在開發Play上的新應用程序! 2.4。 我在1.4上還有其他應用程序,並且正在尋找如何實現與Play類似的安全方法! 1.x的

我創建了一個安全控制器,如下所示:

@With(Security.class)
public abstract class SecureController extends Controller {

}

然后,我有了Security.class:

public class Security extends Action.Simple {   
    public F.Promise<Result> call(Http.Context ctx) throws Throwable {   
        if(ctx.session().containsKey("pwdHash") && ctx.session().containsKey("securityId")){
            User user = User.find.where().eq("id",ctx.session().get("securityId")).findUnique();
            if(user != null) {
                if(user.getAuthToken().equals(ctx.session().get("pwdHash"))) {
                    // TODO: Don't think this works yet.
                    ctx.request().setUsername(user.getEmail());
                    return delegate.call(ctx);
                }
            }
        }    
        ctx.session().put("referer", ctx.request().path());
        return F.Promise.pure(redirect(routes.Logon.doLogon()));
    }
}

這可以正常工作,用戶可以在有效登錄后訪問頁面。 但是,我現在想做的是與1.x一樣工作,您可以使用@Check(“ admin”)之類的內容進行注釋。

在1.x中,可以通過擴展Secure.Security並實現以下功能來實現:

public static boolean check(String profile, User user)

創建注釋顯然很容易:

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public @interface Check {

    UserTask value();

}

但是,如果用戶具有給定注釋的必需權限,我現在如何讓系統檢查SecureController的每種方法? 在播放1.x中,有play.mvc.Before可以使用。

[編輯]我的意圖是添加如下內容:

@Check(UserTask.REGISTRATION)
public static Result index(int page)

經過進一步研究,我在Play中找到了解決方案! 文檔。 上面的問題已經朝着正確的方向發展,我只需要通過添加注釋並將其鏈接到操作(然后使用注釋調用函數)來擴展它。

https://www.playframework.com/documentation/2.4.x/JavaActionsComposition

暫無
暫無

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

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