我有一个捕获22。
我正在实现一个服务客户端,其职责是在LDAP服务器上对用户进行身份验证。客户端接受用户标识和密码,确定userDn,并调用对LDAP服务器的请求。
我的问题是此刻设置spring ldap模板的方式。 LdapTemplate
在bean创建时需要ContextSource
。 ContextSource
在创建时配置为某个值(ldapurl,userdn,password)。但我意识到我的ContextSource
会随着每个用户而改变。每个用户根据用户的DN打开连接。所以,我的contextsource每个用户都不同,因此在bean创建时创建ContextSource
(容器启动)不是正确的地方。并且,无法通过ContextSource
AFAIK覆盖LdapTemplate
(使用用户ID /密码)。
因此,在我的代码中显式创建Ldap ContextSource
对象是一个好主意,方法是使用实际的用户ID和密码(并且其url是所有用户的常量)显式初始化它并更新我的使用LdapTemplate
的setter方法生成LdapTemplate
bean?在我的客户端调用之后,我将通过将ContextSource
设置为null
来处置import Alamofire
import AlamofireImage
class AppCategory: NSObject {
var id: NSNumber?
var title: String?
var apps: [App]?
var type: NSNumber?
static func fetchFeaturedApps(completionHandler: @escaping ([AppCategory]) -> ()) {
let jsonResult = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as! [String: AnyObject]
var appCategories = [AppCategory]()
let sections = OFFERIM["sections"] as! [Dictionary<String, AnyObject>]
for i in 0..<sections.count {
var appCategory = AppCategory()
var apps = [App]()
let sectionTitle = sections[i]["title"] as! String
appCategory.title = sectionTitle
let sectionType = sections[i]["type"] as! NSNumber
appCategory.type = sectionType
let sectionId = sections[i]["id"] as! NSNumber
appCategory.id = sectionId
// for Apps inside each section
let lists = sections[i]["lists"] as! [String: AnyObject]
for j in 0..<lists.count{
let app = App()
let id = lists[j]["id"] as! NSNumber
app.id = id
let thumb = lists[j]["thumb"]! as! String
Alamofire.request(thumb).responseImage { response in
if let image = response.result.value {
app.image = image
print("image downloaded: \(image)")
}
}
let title = lists[j]["title"] as! String
app.title = title
apps.append(app)
}
appCategory.apps = apps
appCategories.append(appCategory)
}
DispatchQueue.main.async(execute: {
completionHandler(appCategories)
})
}catch{
print("JSON Processing Failed")
}
}.resume()
}
}
(模板比操作更长,因为它是一个生活在spring容器中的bean。因此可以重用它,因此可以重新使用以前的信息上下文一定不可用。)
问题: 如上所述,是否有另一种解决此问题的方法?