我正在使用 Spring 构建 REST API,并且目前正在使用自定义用户详细信息服务和以下配置代码对我的所有请求进行身份验证:
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().authenticated().and().httpBasic();
}
Run Code Online (Sandbox Code Playgroud)
我还设置了一个DaoAuthenticationProvider使用我的用户详细信息服务并使用它来配置全局安全性。
现在,我想提供一个端点(虽然仍然使用 HTTP 基本身份验证进行保护)使用不同的用户详细信息服务来检查是否允许用户访问给定资源。
如何为不同的端点使用两种不同的用户详细信息服务?
我创建了一个符合ErrorSwift的自定义枚举,如下所示:
enum CustomError: Error{
case errorWith(code: Int)
case irrelevantError
}
Run Code Online (Sandbox Code Playgroud)
CustomError 可以选择通过闭包从异步函数返回,如下所示:
func possiblyReturnError(completion: (Error?) -> ()){
completion(CustomError.errorWith(code: 100))
}
Run Code Online (Sandbox Code Playgroud)
我现在想检查CustomError闭包中返回的类型。与此同时,如果它是一个CustomError.errorWith(let code),想提取那个的代码CustomError.errorWith(let code)。所有这些我都想使用 if 语句的条件来完成。沿着这个思路:
{ (errorOrNil) in
if let error = errorOrNil, error is CustomError, // check if it is an
//.errorWith(let code) and extract the code, if so
{
print(error)
}
else {
print("The error is not a custom error with a code")
}
}
Run Code Online (Sandbox Code Playgroud)
这完全可能使用 Swift 3.0 吗?我尝试了我能想到的各种组合,但是,所有尝试都没有结果,并以编译时错误告终。