PlayFramework 1.4 在条件不满足后防止传播

Posted

技术标签:

【中文标题】PlayFramework 1.4 在条件不满足后防止传播【英文标题】:PlayFramework 1.4 prevent propagation after condition not fulfilled 【发布时间】:2016-09-13 09:37:54 【问题描述】:

我有一个问题:我想使用@Before来拦截请求并检查是否满足某个条件;如果不是,请阻止传播并向用户返回消息。

除了抛出异常还有其他方法吗?

代码示例:

在路线中:

   GET /someRoute  MainController/someMethod
   GET /otherRoute MainController/otherMethod

在控制器中

public class MainController
@Before
public static void check()
// checking, if not fulfilled - render error and requested method is not invoked.

public static void someMethod() /*some action*/
public static void otherMethod() /*...other action*/

【问题讨论】:

请添加一些代码。到目前为止,您尝试了什么? 只想放在 Controller @Before Adnotation 中以拦截调用此控制器方法的所有请求 - 然后我想检查用户是否有权查看结果(我从配置中获得一个参数,它是不重要) - 如果是这样,则调用被调用的方法(它们本身,就像没有@Before),否则我会向页面呈现错误消息。 【参考方案1】:

由于@Before注解的方法在Controller上,所以可以使用所有的静态函数直接回答。 例如,如果您想返回纯文本:

public class MainController
@Before
public static void check()
  // checking, if not fulfilled - render error and requested method is not invoked.
  renderText("Error");

public static void someMethod() /*some action*/
public static void otherMethod() /*...other action*/

这将停止传播并向请求发送响应。

例如,您也可以使用 error() 或 disabled()。

【讨论】:

非常感谢,我不确定渲染是否会破坏传播,但你向我保证了 :)

以上是关于PlayFramework 1.4 在条件不满足后防止传播的主要内容,如果未能解决你的问题,请参考以下文章

5 流程控制

问答 | MySQL 什么时候不走索引?

参考 - 升级 PHP 后 Composer 错误“您的 PHP 版本不满足要求”

流程控制

7.流程控制-未完成

分支&循环