应用程序未验证 jmeter 脚本的虚拟用户并在日志中打印“anonymousUser”

Posted

技术标签:

【中文标题】应用程序未验证 jmeter 脚本的虚拟用户并在日志中打印“anonymousUser”【英文标题】:Application is not authenticating the virtual users of jmeter script and in logs printing "anonymousUser" 【发布时间】:2017-08-07 03:25:09 【问题描述】:

我在 badboy 中录制了我的脚本并在 JMeter 中转换了它。我的脚本如下: enter image description here

当为 1 个用户运行此脚本时,应用程序未授权用户并在日志中引发以下异常:

调试:access.intercept.FilterSecurityInterceptor - 以前经过身份验证:org.springframework.security.authentication.AnonymousAuthenticationToken@:主体:anonymousUser;凭证:[受保护];已认证:真实;详细信息:org.springframework.security.web.authentication.WebAuthenticationDetails@0: RemoteIpAddress: ;会话ID:;授予权限:ROLE_ANONYMOUS 调试:access.vote.AffirmativeBased - 投票者:org.springframework.security.access.vote.RoleVoter@514020c0,返回:-1 调试:access.vote.AffirmativeBased - 投票者:org.springframework.security.access.vote.AuthenticatedVoter@502dc360,返回:0 调试:web.access.ExceptionTranslationFilter - 访问被拒绝(用户是匿名的);重定向到身份验证入口点 org.springframework.security.access.AccessDeniedException:访问被拒绝

当我访问 Web 应用程序并使用同一用户登录时,它会授权同一用户并在日志中打印以下跟踪:

调试:access.intercept.FilterSecurityInterceptor - 先前已验证:org.springframework.security.authentication.UsernamePasswordAuthenticationToken@:主体:com.A.B.C.D.User@6d513c13;凭证:[受保护];已认证:真实;详细信息:com.A.B.C.D.E.UserAuthenticationDetails@0: RemoteIpAddress: ;会话ID:;授予权限:学习者 调试:access.vote.AffirmativeBased - 投票者:org.springframework.security.access.vote.RoleVoter@514020c0,返回:1 调试:access.intercept.FilterSecurityInterceptor - 授权成功 调试:access.intercept.FilterSecurityInterceptor - RunAsManager 没有更改身份验证对象

但在 JMeter 中,我的测试没有标记为失败,所有采样器都成功并返回 200。

谁能帮帮我!谢谢。

【问题讨论】:

【参考方案1】:

录制和回放并不是 100% 的事情,很可能您必须手动“调整”您的脚本来执行关联和参数化。

相关性:处理动态参数的过程(Web 应用程序开发人员将它们用于tracking user status or protecting from CSRF attacks),检测它们非常容易:只需记录您的测试 2 次并比较记录的请求。需要关联不同的值,即您需要从先前使用 Regular Expression Extractor 的响应中提取它们,并在下一个请求中使用生成的 JMeter 变量而不是硬编码值 参数化:您不会使用 1 个虚拟用户运行负载测试,是吗?您应该使用尽可能多的用户名/密码组合来模仿您的目标用户。通常人们使用CSV Data Set Config 来保存此类数据。同样,您需要将记录的值替换为 CSV 文件中的变量

完成后,使用 1 - 2 个虚拟用户/迭代运行您的测试,并仔细检查 View Results Tree 侦听器中的请求和响应详细信息,以确保您的测试正常运行。

关于in JMeter my test was not marked fail,JMeter 将状态代码低​​于 400 的 HTTP 响应视为成功,因此即使您有数百个以粗体和红色显示但 HTTP 状态代码为 200 的异常 - JMeter 会将结果标记为“绿色”。您可以使用Response Assertion 为JMeter 测试添加一些失败标准,即对于登录的用户文本,如Welcome, $username 是预期的等等。

【讨论】:

对于相关性:JSessionId 用于发送 login.do 请求并从 j_spring_security_check 接收新的 JSessionId。这项工作是使用配置元素“用户定义的变量”处理的,我清楚地注意到 JSessionId 正在正确传递。对于参数化:是的,我正在使用 CSV 数据集配置并输入 1000 个具有密码的唯一用户,并且所有用户也存在于数据库中。然后我将这些用户作为参数传递给 j_spring_security_check 请求。

以上是关于应用程序未验证 jmeter 脚本的虚拟用户并在日志中打印“anonymousUser”的主要内容,如果未能解决你的问题,请参考以下文章

JMeter--参数化

jmeter学习笔记——参数化

JMeter学习-参数化

JMeter学习参数化

JMeter学习参数化

JMeter学习参数化