正如here所述,我只有在满足条件时才需要运行Circumflex动作。目前,我这样做:
get("/") = requireLogin {
...
}
现在Circumflex支持Matchers,它可以放在get()
规范中:
get("/mail" & Host("localhost"))
如何编写自己的匹配器,以上requireLogin
更接近Circumflex风格?我想写这样的东西:
get("/" & IsLoggedIn) = {
...
}
答案 0 :(得分:0)
这是一个简单的实现。所需要的只是定义一个具有所需名称的对象,从AtomicMatcher
扩展(因为这个实现add()
等)并实现name
和apply
方法:
object IsLoggedIn extends AtomicMatcher {
def name = "IsLoggedIn"
def apply = {
// Not shown: figuring out whether user is logged in or not
if(loggedIn) {
Some(List(new MatchResult(name)))
}
else {
sendRedirect("/login")
throw new ResponseSentException;
}
}
}
如果用户已登录(即可以执行操作),则需要返回至少一个MatchResult
的列表。如果您不想执行该操作,请执行其他操作,然后返回None
或抛出ResponseSentException
,which seems to be the preferred way。