Clojure 路由到404并使用中间件.basic-authentication

Clojure 路由到404并使用中间件.basic-authentication,clojure,Clojure,我已经掌握了大部分内容,至少是这个问题的重要部分 当我试图访问一些不存在的页面时,我没有得到404,但首先,我得到了身份验证对话框,我必须写凭证,才能看到404。这不是我对404和路由的期望。我如何克服这个问题 非常感谢,祝大家圣诞快乐 您的顶层允许公共路径有第一次机会提供响应,如果它们不匹配(或选择不响应),则请求将转到需要验证的部分: (defroutes app-routes public-routes (wrap-basic-authentication protected-ro

我已经掌握了大部分内容,至少是这个问题的重要部分

当我试图访问一些不存在的页面时,我没有得到404,但首先,我得到了身份验证对话框,我必须写凭证,才能看到404。这不是我对404和路由的期望。我如何克服这个问题


非常感谢,祝大家圣诞快乐

您的顶层允许公共路径有第一次机会提供响应,如果它们不匹配(或选择不响应),则请求将转到需要验证的部分:

(defroutes app-routes
  public-routes
  (wrap-basic-authentication protected-routes authenticated?)
  (route/not-found "404 Not Found"))
如果在验证之后,未找到路由,则返回404。因为在进行身份验证之前无法判断私有路由是否会声明请求,所以所有请求都属于
wrap-basic-authentication
处理程序。这会导致在决定路径是否有效之前发生身份验证请求。wrap-basic身份验证不允许未经身份验证的用户在身份验证之前通过尝试和错误映射站点,这非常有意义,因此它需要身份验证,然后才能告诉您是否存在路径

在私有路径处理程序中,所有路径都以“admin”开头,如果在站点的受保护部分之外可以访问该路径,则可以很好地了解像“/foo/bar/”这样的请求是否非私有且不存在,因此应该得到404响应。如果您访问顶级处理程序并将wrap基本身份验证放到私有路由中,该路由将为您提供有用的错误消息,而不允许未经身份验证的人员映射站点的私有区域

比如:

(defroutes app-routes
  public-routes
  (context "/admin/"
     (wrap-basic-authentication protected-routes authenticated?))
  (route/not-found "404 Not Found"))
然后从每个专用路径的开头删除“admin”一词