将信息传递给@With注释播放框架以进行用户授权

时间:2015-08-10 01:48:35

标签: java annotations playframework-2.0 authorization

我正在编写应用程序2.4,在执行操作之前我想确保用户有权执行操作。

我能够使用请求标头中的信息检索当​​前用户,但是如果可以像这样传递操作名称,那将非常有用。

@With(Authorization.class , action="create_account")
public static Result createAccount(){
   return ok("Account created");
}

然后授权可以做这样的事情。

public class Authorization extends Action.Simple{
   @Override
   public F.Promise<Result> call(Http.Context context) throws Throwable{
      if(action == "zoom")
         throw new UnauthorizedExcption("You can't do that!");
      else
           return delegate.call(context);
   }

基本上我的问题是我需要将数据传递给Authorization类。解决这类问题的方法是什么?

2 个答案:

答案 0 :(得分:2)

自己创建一个接受参数的自定义注释:

@With(Authorization.class)
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Auth {
    String value() default "";
}

按如下方式注释您的控制器方法:

@Auth("create-account")
public static Result createAccount(){
   return ok("Account created");
}

要从注释中检索值,请使Authorization类扩展Action<Auth>

public class Authorization extends Action<Auth> {
    String value = configuration.value();
    // ...
}

答案 1 :(得分:0)

我通过在Sessions之间传递数据做了类似的事情。看看以下链接!希望这可以帮助! :)