拦截播放中的所有响应2.1

问题描述:

有没有办法拦截所有使用Play Framework 2.1的HTTP响应?拦截播放中的所有响应2.1

这是我在我的Global.java文件拦截所有请求,但我也期待拦截对策:

import java.lang.reflect.Method; 

import play.GlobalSettings; 
import play.mvc.*; 
import play.mvc.Http.*; 
import views.html.*; 

public class Global extends GlobalSettings { 

    private static BasicAuthHandler AUTH; 

    @SuppressWarnings("rawtypes") 
    @Override 
    public Action onRequest(Request request, Method actionMethod) { 

     if (...) { 
      return new Action.Simple() { 

       @Override 
       public Result call(Context ctx) throws Throwable { 
        return unauthorized(); 
       } 
      }; 
     } 

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

我读过的文件上manipulating the response但它只是描述了如何为每个结果单独做。

TransactionalAction是请求/响应拦截器的一个例子。它扩展了Action并提供了针对控制器类型或方法的Transactional注释。与动作注释的控制器方法的

实施例:

@Transactional 
public static Result ok(){ 
    return ok(); 
} 

More details

的动作测井响应的一个例子(记住,这不提供注释等Transactional动作,延伸Action.Simple):

public class LogAction extends Action.Simple { 

    @Override 
    public F.Promise<Result> call(Http.Context ctx) throws Throwable { 
     F.Promise<Result> call = delegate.call(ctx); 
     return call.map(r -> { 
      String responseBody = new String(JavaResultExtractor.getBody(r, 0L)); 
      Logger.info(responseBody); 
      return r; 
     }); 
    } 
} 

用途,方法定义:

@With(LogAction.class) 
public static Result ok(){ 
    return ok(); 
} 

用法,类定义 - 截取的所有方法:

@With(LogAction.class) 
public class BaseController extends Controller { 

    .... 

} 

You ca如果你不喜欢@With注解,那么向前走一步。定义自定义注释自己:

@With({ LogAction.class }) 
@Target({ ElementType.TYPE, ElementType.METHOD }) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface Log { 
} 

,并使用它是这样的:如果你的自定义注解接受参数

@Log 
public static Result ok(){ 
    return ok(); 
} 

,改变LogAction的定义是这样的:

public class LogAction extends Action<Log> { 
    // use configuration object to access your custom annotation configuration 
} 
+0

这是否意味着我有在所有返回结果的控制器方法之上添加“@With()'注释? – 2014-10-10 18:55:02

+0

您可以将它放在类或方法定义级别。 – 2014-10-12 14:29:48