用于每个请求的用户身份验证的Spring LDAP模板用法

时间:2017-02-08 08:28:53

标签: spring spring-boot ldap spring-ldap ldap3

我有一个捕获22。

我正在实现一个服务客户端,其职责是在LDAP服务器上对用户进行身份验证。客户端接受用户标识和密码,确定userDn,并调用对LDAP服务器的请求。

我的问题是此刻设置spring ldap模板的方式。 LdapTemplate在bean创建时需要ContextSourceContextSource在创建时配置为某个值(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。因此可以重用它,因此可以重新使用以前的信息上下文一定不可用。)

问题: 如上所述,是否有另一种解决此问题的方法?

0 个答案:

没有答案