我需要做的是连接到LDAP,然后将此连接传递给几个类,这些类执行各种处理步骤。
我遇到的问题是我是否应该通过构造函数将连接传递给这些类,或者每个类应该管理自己的连接。
我在第一种方法中看到的问题是调用者可能不知道他自己负责关闭流。第二种方法似乎也不合适,因为打开/关闭/重新打开连接也没有意义。
有关于此的任何想法吗?
答案 0 :(得分:1)
我不知道为什么你有几个类处理LDAP。也许您应该考虑将这些分散的操作组合到一个完全负责LDAP操作的类中。
如果那是不可能的,那么你的直觉是正确的。打开连接的类应该在finally块中关闭它。这应该是基于接口的POJO服务类,它知道该用例的工作单元。毫无疑问责任在哪里。如果您没有这样的服务,请创建一个。
如果操作不属于单个工作单元,则应由单独的服务进行管理。上一段的评论仍然适用。
您在汇集LDAP连接吗?我希望如此。
我建议您查看Spring LDAP module,特别是如果您已经是Spring用户的话。它使得处理LDAP资源变得容易,就像JDBC一样。
答案 1 :(得分:1)
构建实用程序类或提供各种服务的任何其他类是一种不好的做法。类应提供单个服务或一组严格控制的服务,否则您也可以返回FORTRAN垃圾公共块。要在类之间共享LDAP连接,请封装连接(这也将用于隐藏API详细信息)。然后通过使用目录服务器上的帐户进行身份验证来保护方法。例如,应该要求close()
方法对具有特权的帐户进行身份验证,或者是关闭组的成员,或者您喜欢的任何authn / authz。您应该使用UnboundID LDAP SDK进行此类工作。另请参阅“LDAP: Programming Practices”。