2016-04-29 6 views
8

В моем приложении java-play у меня есть аннотация @RequiresAuthentication(clientName = "CasClient") внутри моего контроллера.Есть ли способ условно применить аннотации?

Я только хочу, чтобы аутентифицировать пользователей в моей производственной среде.

Как можно условно аннулировать аннотации?

Если способ, которым я приближаюсь к аутентификации, ошибочен, каков традиционный способ проверки подлинности CAS только при производстве в приложении для воспроизведения в Java?

+0

насчет этого? https://www.playframework.com/documentation/2.1.1/JavaGuide4 –

+0

попытайтесь использовать это условие после получения ответа или использовать аннотацию после проверки того, что вы хотите! Я не вижу здесь проблемы –

+0

@AhmadAlsanie, если бы вы могли привести пример того, как я буду использовать аннотацию после выполнения проверки, это именно то, что я ищу для ответа. – Blinky

ответ

3

Вы можете реализовать аутентификаторов для аутентификации пользователей. вы могли бы написать свою логику аутентификации в своей реализации аутентификатора.

В игре уже есть встроенный аутентификатор действие, которое мы продолжим, чтобы добавить нашу логику. Мы будем называть это аутентификатором Обеспечено.

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()); 
    } 
} 

Мы реализовали здесь два метода. getUsername используется для получения имени пользователя текущего пользователя. В нашем случае это адрес электронной почты, который мы установили в атрибуте электронной почты в сеансе, когда пользователь вошел в систему. Если этот метод возвращает значение, то аутентификатор считает, что пользователь вошел в систему и позволяет продолжить запрос , Если, однако, метод возвращает null, то аутентификатор заблокирует запрос и вместо этого вызовет onUnathorized, который мы внедрили для перенаправления на наш экран входа. Вы можете реализовать свою собственную бизнес-логику для подтверждения пользователем пользователя.

Теперь давайте использовать этот аутентификатор. В Application.java, добавьте @ Security.Authenticated аннотацию с нашим идентифицирующей к индекса метода:

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

Смежные вопросы