在功能测试中,如何使用 Play Framework 中的安全模块伪造经过身份验证的用户?

2024-02-01

如何在 Play Framework 1.2.3 的功能测试中伪造会话值?

我正在做一个简单的测试,例如:

在运行测试之前,我设置了一个空白会话,希望它能够成为测试的一部分:



@Before
public void setupHTTP() {
   Session.current.set(new Session());
}
  


@Test
public void testRedirectToUserHomeForAuthenticatedUserWhenBlankAction() {
    authenticateUser("[email protected] /cdn-cgi/l/email-protection");
    Response response = GET("/user/blank");
    assertRedirected(response, "/user/home");
}
  

方法


authenticate(String userEmail)  
just put the key "username" in the session map:


protected void authenticateUser(String userEmail) {
        // Put in session the email
        Session.current.get().put(USERNAME, userEmail);
}
  

但是测试在不同的线程中运行,只要我能理解,并且看不到我设置的会话......

如何在功能测试中伪造会话值?


我有同样的问题,但在 Play 2.0.4 的测试中。

我通过以下方式解决了问题Seb https://stackoverflow.com/a/8119106/1792009 and Codemwnci https://stackoverflow.com/a/5762992/1792009答案和我建立,检查 API,以下解决方案:

@Test
public void listSomething() {
    running(fakeApplication(inMemoryDatabase()), new Runnable() {
        @Override
        public void run() {
            // LOGIN
            final Map<String, String> data = new HashMap<String, String>();
            data.put("email", "[email protected] /cdn-cgi/l/email-protection");
            data.put("password", "userpassword");

            Result result = callAction(
            controllers.routes.ref.Application.authenticate(),
            fakeRequest().withFormUrlEncodedBody(data));

            // RECOVER COOKIE FROM LOGIN RESULT
            final Cookie playSession = play.test.Helpers.cookie("PLAY_SESSION",
                                                                result);

            // LIST SOMETHING (using cookie of the login result)
            result = callAction(controllers.routes.ref.Application.list(), 
                                fakeRequest().withCookies(playSession));

            /* 
             * WAS RECEIVING 'SEE_OTHER' (303) 
             * BEFORE RECOVERING PLAY_SESSION COOKIE (BECAUSE NOT LOGGED IN).
             *
             * NOW, EXPECTED 'OK'
             */ 
            assertThat(status(result)).isEqualTo(OK); 
            assertThat(contentAsString(result)).contains(
                    "Something found");
        }
    });
}

Application.list() 是这样的:

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

在功能测试中,如何使用 Play Framework 中的安全模块伪造经过身份验证的用户? 的相关文章

  • 我可以从任意异步任务访问 Http.Context.current() 吗?

    我正在开发一个移动应用程序的后端 该应用程序当前在 Play 2 1 1 上运行 作为处理某些请求的一部分 我们会发送推送通知 发送推送通知的下游请求应该完全异步 并且与移动客户端的原始请求响应分离 我想访问Http Context cur
  • SBT 未解决 Squeryl 依赖关系

    我最近开始了一个新项目 Play 框架和Scala 我习惯于使用 Squeryl 进行 ORM 但由于某种原因 这次它无法解决我的依赖关系 尽管它会解决其他问题 只是不能解决 squeryl 问题 我所做的唯一不同的是 我使用的计算机与以前
  • 将对象的 json 数组解析为适当的案例类

    我有一个 json 数组settings像这样 name Company Name key company name default Foo name Deposit Weeks key deposit weeks default 6 na
  • Play Framework Scala 格式大型 JSON(未找到 unapply 或 unapplySeq 函数)

    我需要在我的服务器上接收一个大的 JSON 超过 22 个字段 我有一个包含很多字段的案例类 case class Filters objectType Option String None deal Option String None
  • sbt 中未解决的依赖关系

    运行我的sbt构建 我得到以下内容未解决的依赖关系 warn warn UNRESOLVED DEPENDENCIES warn warn com typesafe play sbt link 2 2 0 not found warn co
  • 如何在 Slick 中调用存储过程并获取返回值(使用 Scala)

    我正在尝试从 Slick 3 0 在 Play Framework 中 调用存储过程 我已经一遍又一遍地阅读文档 但不幸的是Typesafe 上的纯 SQL 文档 http slick typesafe com doc 3 0 0 sql
  • 大数据请求体为空

    我在 post 方法的正文中发送大量文本 我使用 Postman 来测试这一点 但是它工作正常 我可以像这样读取请求正文 String text request body asText 但是当我尝试在正文中发送大量数据时 我得到的文本为空
  • 玩框架。无需编译

    我被介绍到 Play 框架 我发现它的令人惊奇的事情之一是不需要编译项目 您只需保存编辑的文件并重新加载网页即可 我听说 Java 源代码被编译为字节码 然后使用 JIT 编译器进行编译 那么 Play 框架内部到底有什么魔力呢 在 DEV
  • 关于使用 playframework 实现购物车的建议

    我正在学习使用playframework通过编写代码来实现webstore用于销售物品 我已经实施了Admin区域使用crud and secure模块 现在 我想创建一个shopping cart用户可以向其中添加商品并继续结账 我对电子
  • Play async/await 中会话/上下文丢失

    看来await 方法失去上下文 public static action session put key value await someAsyncCall Now for some reason the session doesn t h
  • PlayFramework:如何转换 JSON 数组的每个元素

    鉴于以下 JSON values one two three 我如何在 Scala Play 中像这样转换它 values elem one elem two elem three 这很容易Play 的 JSON 转换器 https www
  • 清理 IntelliJ 中构建的 Play 框架

    我有一个拼写错误conf routes文件导致 Play Framework 生成错误命名的类 重建项目并运行Invalidate Caches并没有解决 IntelliJ 中的问题 当我手动运行时重新生成了不正确的类文件play clea
  • Play框架:单属性案例类的JSON读取

    我正在尝试为包含单个属性的案例类创建隐式 JSON Reads 但收到错误 Reads Nothing 不符合预期类型 这是代码 import play api libs functional syntax import play api
  • Slick和bonecp:org.postgresql.util.PSQLException:FATAL:抱歉,太多客户端已经错误

    当我在本地开发应用程序时 我使用以下命令启动我的 play2 应用程序sbt run 我喜欢如何更改代码 然后重新加载浏览器以查看我的更改 在大约 10 次代码更改之后 我收到 postgresql 太多连接错误 见下文 我的数据库连接使用
  • Typesafe 存储库和激活器出现问题

    在尝试创建新的 Play Framework 2 3 应用程序时 我收到了未解决的依赖项的错误 我检查了存储库 但无法手动找到依赖项 error update sbt ResolveException unresolved dependen
  • 玩!框架:如何从“slugify()”网址查找项目?

    play 框架在视图中有一个功能 可以通过以下方式创建 SEO 友好的 URL slugify 功能 似乎没有 unslugify 功能 那么如何从slugify参数中查找模型呢 例如 如果我有一个博客模型 其标题属性设置为 hello w
  • 如何插入UUID的值?

    我在 Play Framework 2 3 支持的 postgresql 9 4 中使用 anorm 2 4 给出一个这样的模型 case class EmailQueue id UUID send from String send to
  • 在游戏框架中编写功能测试的正确方法

    在为基于 play1 2 4 的 web 应用程序编写功能测试时 我对如何正确编码感到有点困惑 困惑在于所涉及的事务边界 我在某处读到每个测试都有自己的事务 在我的应用程序中 用户可以登录并向购物车添加一些商品 然后他可以提供一个地址 以便
  • 如何启动两个播放应用程序实例?

    我正在尝试在不同端口中部署同一播放应用程序的两个实例 并通过前面的 nginx 进行负载平衡 根据manual http www playframework com documentation 2 2 x HTTPServer 要启动多个播
  • 开发者环境-如何调用/消费其他微服务

    背景 我的环境 Java Play2 MySql 我在 Play2 gt S1 S2 S3 上编写了 3 个无状态 Restful 微服务 S1 消耗来自 S2 和 S3 的数据 因此 当用户点击 S1 时 该服务会异步调用 S2 S3 合

随机推荐