我有两组compojure路由,公共路由不需要认证,私有路由需要认证。
我创建了一个中间件,用于检查用户是否已经通过身份验证,并继续执行中间件链或者引发异常。
(defroutes public-routes
(GET "/" [] homepage-handler))
(defroutes private-routes
(GET "/secrets" [] secrets-handler))
我创建了一个中间件,用于检查用户是否已经通过身份验证,并继续执行中间件链或者引发异常。
(defn wrap-must-be-authenticated [handler]
(fn [request]
(if (authenticated? request)
(handler request)
(throw-unauthorized))))
(def app
(-> private-routes
(wrap-must-be-authenticated)))
这很好,所有的“私有路由”都需要身份验证。
我该如何添加public-routes
,使它们从wrap-must-be-authenticated
中排除?
我认为defroutes
返回环形处理程序,所以我想我需要这样做:
(-> (wrap-must-be-authenticated private-routes)
public-routes)
#'
是什么意思? - Krisvar
来定义路由,这可以帮助你在运行应用时编辑/重新加载代码。路由不会绑定到静态值,而是从var
中解析,这个值可以在应用启动后进行更改。顺便提一下,您不必在路由前加上#'
前缀。 - Taylor Wood{:status 401}
而不是抛出异常。 - Taylor Wood