使用 spring-security 和 ldap 进行集成测试

2023-11-25

Spring在单元测试中嵌入了ldap服务器类似,但没有给出适合我的答案。

我可以使用 spring 和 spring-security 的嵌入式 ldap 服务器运行集成测试,没有任何问题。 但是,我还没有找到一种方法来清除嵌入式 ldap 服务器并再次加载 ldif 以提供通用的测试环境。

spring-ldap 的 LdapTestUtils 提供了 cleanAndSetup() 方法。但是,这不适用于建议的 apache-ds 版本 (1.5.5),因为 LdifFileLoader 现在需要核心会话而不是目录上下文由 LdapTestUtils 提供。这会导致

java.lang.NoSuchMethodError:
org.apache.directory.server.protocol.shared.store.LdifFileLoader.<init>(Ljavax/naming/directory/DirContext;Ljava/lang/String;)

我只想要一种方法来清除嵌入式 ldap 服务器并再次用 ldif 文件填充它(如启动时所做的那样)。 有人对此有什么想法吗?

版本:spring 3.1、spring-ldap 1.3、spring-security 3.1、apache-ds 1.5.5

解决方案(感谢卢克·泰勒):

@Inject
private ApplicationContext applicationContext;

@Before
public void reloadLdapDirectory() throws NamingException, IOException{
    ApacheDSContainer apacheDSContainer = (ApacheDSContainer) applicationContext.getBean(BeanIds.EMBEDDED_APACHE_DS);
    LdapTestUtils.clearSubContexts(contextSource, DistinguishedName.EMPTY_PATH);

    ClassPathResource classPathResource = new ClassPathResource("ldap.ldif");

    File tempFile = File.createTempFile("spring_ldap_test", ".ldif");
    try {
        InputStream inputStream = classPathResource.getInputStream();
        IOUtils.copy(inputStream, new FileOutputStream(tempFile));
        LdifFileLoader fileLoader = new LdifFileLoader(apacheDSContainer.getService().getAdminSession(), tempFile.getAbsolutePath());
        fileLoader.execute();
    }
    finally {
        try {
            tempFile.delete();
        }
        catch (Exception e) {
            // Ignore this
        }
    }
}

为什么不看看 Spring Security 的LDAP 集成测试并使用它们作为指导?

目前,这些只是使用 LDAP 模板必要时清除每个测试创建的数据(为了速度),但还有一个被注释掉的Junit @After method它会重新加载 LDIF 文件。这CoreSession是通过调用获得的getAdminSession()在服务器实例上(aDefaultDirectoryService).

如果您确实必须使用 XML 应用程序上下文运行测试,请使用<ldap-server />元素,您可以使用:

getBeanByName(BeanIds.EMBEDDED_APACHE_DS).getService()

访问DefaultDirectoryService实例。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 spring-security 和 ldap 进行集成测试 的相关文章

随机推荐

  • FragmentPagerAdapter getItem 位置错误

    我的 FramentPageAdapter 有一个奇怪的问题 MainActivity java SuppressLint ValidFragment public class MainActivity
  • Swift:以 NSException 类型的未捕获异常终止

    我正在开发一个简单的应用程序 当我单击注册用户时 该应用程序将被终止 请帮我解决这个问题 它说 由于未捕获的异常 NSUnknownKeyException 而终止应用程序 原因 setValue forUndefinedKey 这个类不是
  • 在 C# 和 Mysql 中使用预准备语句

    我在程序中尝试了准备好的语句 但不起作用 注释的部分是Prepared Statement 部分 当我把它改成正常的语句时 一切都正确了 有人能告诉我我错过了什么吗 非常感谢 private void btnLogin Click obje
  • 模拟服务器请求 Android Espresso UI 测试

    我正在使用 Espresso 为我的 Android 应用程序编写 UI 测试 并且想使用 MockWebServer 模拟 http 请求 我需要在运行测试之前模拟身份验证响应并登录用户 有没有办法让应用程序使用mockwebserver
  • C# 中的代理/邮箱处理器使用新的 async/await

    这个问题结合了两个我不完全理解的主题 阅读通过paper关于 F 中的异步 我遇到了 Agents MailboxProcessors 主题 它可用于实现反应式状态机 C 5 中新的 async await 功能是否可以用于在 C 中实现类
  • 如何从控制器方法重定向到路由

    我在控制器中定义了一个方法 首先检索输入 如果我的数据库中存在电子邮件字段 我想返回一个视图 但是 如果电子邮件字段不存在 我想重定向到另一条路线 我也想将输入传递给该路线 为了更好地理解我的意思 我的控制器代码如下 public func
  • 更改 matplotlib imshow() 图表轴上的值

    假设我有一些输入数据 data np random normal loc 100 scale 10 size 500 1 32 hist np ones 32 20 initialise hist for z in range 32 his
  • gnuplot:标签部分中的斜体

    对于这个 可能 基本问题感到抱歉 但我刚刚开始使用 gnuplot 我想要创建一个轴标签 其中一部分以斜体显示 就像是 xlabel 不是斜体 斜体 我知道设置标签显示斜体很容易 设置xlabel字体 Times Italic 20 但是是
  • Vista 上的 BDE 初始化失败(错误 $2501)

    我有一个用 Delphi 2007 编写的小型 datasnap 服务器 用于访问 BDE 它在 Windows 2000 和 XP 上运行良好 但在 Vista 上时不时 实际上经常 我收到错误消息 尝试初始化 Borland 数据库引擎
  • Android 中无法播放视频

    视频在下面提到的代码中无法正常工作 这可能是什么问题 MediaController mediaController new MediaController getBaseContext mediaController setAnchorV
  • 如何检测 UIImageView 的触摸事件?

    我在导航栏上放置了一个图像 UIImageView 现在我想检测触摸事件并想要处理该事件 我怎样才能做到这一点 实际上 不要这样做 而是在 UIImageView 上添加一个具有自定义样式的按钮 除非指定图像 否则没有按钮图形 然后附加您想
  • Python中字典的深度合并字典

    我需要合并多个词典 例如 这是我所拥有的 dict1 1 a A 2 b B dict2 2 c C 3 d D With A B C and D是树的叶子 就像 info1 value info2 value2 字典的级别 深度 未知 可
  • 在 Java 临界区中,我应该同步什么?

    在 Java 中 在代码中声明临界区的惯用方法如下 private void doSomething thread safe code synchronized this thread unsafe code thread safe cod
  • 尝试使 Web 方法异步

    我目前正在进行的项目涉及使用会话变量的 MS SQL Server 和 ASP net Web 服务 显然 这会导致客户端的调用以顺序方式执行 我想确保这些方法异步执行 经过一些研究后 在我看来 最好的方法是使用跟踪会话的表 例如使用 gu
  • 将误差线添加到具有多个组的条形图中

    我有以下条形图 我想向其中添加误差线 library lattice barchart Change fTreat groups Process change auto key list points FALSE rectangles TR
  • Spring安全注销转到j_spring_security_logout

    在我的网络应用程序中 当我尝试注销时 它会转到j spring security logout而不是给定的页面 在我的spring security xml我已添加的页面
  • 有没有办法在向 B 提供特定模型的同时从控制器 A 调用的控制器 B 返回 ActionResult?

    假设我有一个控制器 public BController Controller public ActionResult Foo FooViewModel vm 同时 我在另一个控制器 AController 中实现一个操作 我想在其中渲染
  • 如何最好地更新网站免受颠覆

    我有一个由 MySQL 数据库支持的 PHP 网站和一个向 subversion 提交代码的程序员小团队 通常我们编写代码 在本地测试 提交颠覆 然后将更改的文件复制到隐藏区域以进行在线测试 然而 可能会犯错误 有时我想刷新站点 以便毫无疑
  • jQuery 手风琴,将单击的选项卡的开头滚动到顶部,如果展开的选项卡位于单击的选项卡之上,则不起作用?

    让我的 jquery 手风琴做我想做的事情时遇到了一些问题 我总是希望被单击的选项卡从页面顶部滚动到固定数量的像素 并且我有点让它工作了 但是 只要活动选项卡位于被单击的选项卡上方 并且页面已经向下滚动一点 则被单击选项卡的顶部和部分内容就
  • 使用 spring-security 和 ldap 进行集成测试

    Spring在单元测试中嵌入了ldap服务器类似 但没有给出适合我的答案 我可以使用 spring 和 spring security 的嵌入式 ldap 服务器运行集成测试 没有任何问题 但是 我还没有找到一种方法来清除嵌入式 ldap