2016-04-29 14 views
8

In meiner Java-Play-Anwendung habe ich die Anmerkung @RequiresAuthentication(clientName = "CasClient") in meinem Controller.Gibt es eine Möglichkeit, Anmerkungen bedingungslos anzuwenden?

Ich möchte nur Benutzer in meiner Produktionsumgebung authentifizieren.

Wie kann ich Anmerkungen bedingt anwenden?

Wenn die Art und Weise, wie ich mich der Authentifizierung annähere, falsch ist, was ist die herkömmliche Art der CAS-Authentifizierung nur bei der Produktion in einer Java-Play-Anwendung?

+0

was ist das? https://www.playframework.com/documentation/2.1.1/JavaGuide4 –

+0

versuchen Sie, die Bedingung zu verwenden, nachdem Sie die Antwort erhalten, oder verwenden Sie die Anmerkung, nachdem Sie überprüft haben, was auch immer Sie wollen! Ich sehe das Problem hier nicht –

+0

@AhmadAlsanie, wenn Sie ein Beispiel, wie ich eine Anmerkung nach der Durchführung einer Überprüfung verwenden könnte, das ist genau das, was ich suche nach Antwort. – Blinky

Antwort

3

Sie können Authenticators implementieren, um Benutzer zu authentifizieren. Sie könnten Ihre Authentifizierungslogik in Ihre Authenticator-Implementierung schreiben.

Play kommt bereits mit einem eingebauten Authenticator Aktion, die wir erweitern werden, um unsere Logik hinzuzufügen. Wir nennen diesen Authentifikator Secured.

import play.*; 
import play.mvc.*; 
import play.mvc.Http.*; 

import models.*; 

public class Secured extends Security.Authenticator { 

    @Override 
    public String getUsername(Context ctx) { 
     return ctx.session().get("email"); 
    } 

    @Override 
    public Result onUnauthorized(Context ctx) { 
     return redirect(routes.Application.login()); 
    } 
} 

Wir haben hier zwei Methoden implementiert. getUsername wird verwendet, um den Benutzernamen des aktuell angemeldeten Benutzers abzurufen. In unserem Fall ist dies die E-Mail-Adresse, die wir im E-Mail-Attribut in der Sitzung beim Anmelden des Benutzers festlegen. Wenn diese Methode einen Wert zurückgibt, betrachtet der Authentifikator den Benutzer als angemeldet und lässt die Anfrage weitergehen . Wenn die Methode jedoch null zurückgibt, blockiert der Authentifikator die Anforderung und ruft stattdessen onUnathorized auf, die wir implementiert haben, um zu unserem Anmeldebildschirm umzuleiten. Sie könnten Ihre eigene Geschäftslogik für Benutzerverifikationsbenutzer implementieren.

Jetzt verwenden wir diesen Authentifikator. In Application.java, fügen Sie die @ Security.Authenticated Anmerkung mit unserem Authenticator an die Index Methode:

import play.mvc.Controller; 
import play.mvc.Result; 

public class Application extends Controller { 

    @Security.Authenticated(Secured.class) 
     public static Result index() { 
     return ok(index.render(
     Project.findInvolving(request().username()), 
      Task.findTodoInvolving(request().username()), 
      User.find.byId(request().username()) 
     )); 
    } 
} 

Refs:Play Implementing Authenticator Example