问题标签 [spring-security-test]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
7975 浏览

spring-test - 如何根据测试注释向 MockMvc 请求添加标头?

作为这个问题的后续,我想知道如何透明地将“授权”标头添加到 a MockHttpServletRequestBuilder,只有当测试中存在给定的注释时。

样本:

.header("Authorization", "Bearer foo")如果测试用 装饰,如何对请求生成器进行后处理以自动应用@WithJwt

0 投票
1 回答
921 浏览

spring-security - 有没有办法在 Spring Boot 测试中只设置安全上下文?

我想编写某种依赖于 Spring Security 的单元测试。

例如,我有一些服务方法,它使用一些存储库并用 @PreAuthorize 注释标记。存储库我可以用 Mockito 模拟,没有问题。我也可以通过@WithSecurityContext注释来模拟安全上下文。但是当我运行测试时,@PreAuthorize 注释被忽略了。当然,我可以使用 @SpringBootTest 注释作为集成测试运行该测试,在这种情况下,安全上下文已启动,但这种方式既繁重又缓慢。

有没有办法在引发 Spring Security Context 的情况下运行单元测试?

更新

做了一个这样的测试的例子。感谢@Sam Brannen 给出正确的方向。

0 投票
1 回答
10607 浏览

java - Spring Boot:禁用 Spring Boot 单元测试的安全性

Spring Boot 版本:2.0.4.RELEASE
对于下面的 Spring Boot 测试,测试返回不需要的 401 响应:

“401”状态,“错误”:“未授权”

为测试禁用 Spring Security 的最佳方法是什么?
我尝试添加配置“security.basic.enabled=false”属性,如下所示:

并将此注释添加到类中:

但不幸的是,测试仍然返回“401”未经授权的错误代码。

原始测试

被单元测试的类很简单:

有谁知道如何为测试禁用弹簧安全性?谢谢

0 投票
1 回答
564 浏览

java - 使用 Spring Security 进行 Spring Boot 2 测试

我在使用 Spring Security 5.1 测试 Spgring Boot 2 应用程序时遇到了一些问题。

问题:我总是收到 403 响应。


这是我尝试过的两种方法:

1)通过执行以下操作禁用测试安全性:

并且仅将 application.properties 用于将此变量设置为 false 的测试。这仍然会导致 403,因为 PreAuthorize 仍然希望您获得授权,并且我在过去禁用安全配置时观察到相同的行为:我还必须注释掉所有 PreAuthorize 注释才能在没有安全性的情况下手动测试。

2)运行测试:

这个解决方案实际上提出了一个问题,即 PreAuthorize 不会自动附加ROLE_前缀,这实际上是我使用它的原因,因为我的角色也没有它。为了尝试运行测试,我实际上更改了我正在访问的路由,如果这是唯一的工作方式,我将更改角色名称(但也许 @Secured 也会这样做)。

这是使用@WithMockUser 时请求的相关部分的样子。

我也尝试过 @Secured 和 @RolesAllowed 有和没有附加 ROLE_ 和相同的行为。到目前为止,其他类似帖子中提出的答案都没有奏效。


那么,对我做错了什么有任何帮助吗?启用安全性的任何正确测试方式?如果没有,如果禁用安全性,有什么方法可以告诉 Spring 忽略 PreAuthorize?

提前致谢!

0 投票
1 回答
495 浏览

spring-security - 会话认证策略的 Spring Security 集成测试

我有一个 Spring MVC + Spring Security Web 应用程序。应用程序在配置中设置了自定义会话身份验证策略

由于该策略包含复杂的逻辑,因此通过集成测试来测试其行为非常重要。

当我们使用 spring-security-test @WithMockUser 时,控制器方法在测试中被调用,但是我们的身份验证策略没有被调用

在 Spring Security 测试中强制执行完整身份验证过程以确保确实调用了会话身份验证策略的正确方法是什么?

或者解释一下:如何调用整个spring安全过滤器链?

感谢您的想法。

0 投票
1 回答
397 浏览

spring-mvc - Spring boot OAuth2 测试安全端点给出 200 状态没有令牌

我使用 OAuth 2 安全性开发带有休息端点的 Spring Boot Web 应用程序。所有端点在运行时都使用密码 grant_type 正确保护。

但是使用 MockMvc 的测试用例不考虑令牌。它可以在没有令牌的情况下访问安全端点。

这是什么原因。

AuthorizationServerConfig.java

资源服务器配置.java

安全配置.java

RestControllerTest.java

MyRestController.java

0 投票
1 回答
847 浏览

spring-boot - 生成带有对 JUnit 测试的附加声明的生成 OAuth2 访问令牌

我使用 OAuth2 保护了 Spring Boot REST API。我的身份验证服务器和资源服务器是两个应用程序。所有 REST API 安全性都可以与 REST 客户端一起正常工作。然后我需要编写安全测试用例。我使用以下代码生成访问令牌。一些端点需要在 REST 方法中手动添加声明。程序给出了有效的访问令牌,但声明不包含在此令牌中。

我如何向此令牌添加声明。

0 投票
1 回答
38 浏览

java - Spring Boot 测试:测试中用户保护的安全控制器

这里有我的控制器方法:

如您所见,它受到保护@PreAuthorize("principal == '" + EspaiDocConstants.BO_COMPONENT_APP + "'")

这是我的测试代码:

不过,我收到了这个异常消息:

DigestAuditsTest.test:91 » AccessDenied 访问被拒绝

编辑

为了填充主体,我使用了自定义过滤器:

所以,principal是一个String包含用户。

除此之外,我现在无法更改此代码,我想知道如何"String user"使用@WithMockUser.

0 投票
0 回答
187 浏览

spring-boot - WithMockUser 不起作用,但 SecurityContext.getContext().setAuthentification 确实

我尝试使用模拟登录,@WithMockUser但它不起作用。

如果我运行测试身份验证AuthenticationCredentialsNotFoundException,那么测试就会失败。

那就是访问受限的服务:

如果您愿意,我可以提供更多配置信息,但目前我不知道这是否有必要。但如果你相信它,我会的。

0 投票
0 回答
1023 浏览

spring-boot - 具有 oauth 安全性的资源服务器控制器的 Spring Boot 集成测试

我们有以下安全控制器:

安全按预期工作。我收到了来自授权服务器的 jwt 访问令牌,并且带有标题“授权承载 xxxx.yyyy.zzzz”的请求,我可以调用这个控制器。

资源服务器已配置非常基本的身份验证

接下来,我尝试为员工控制器编写集成测试,以确保安全工作正常,如下所示:

我发现它存在JwtRequestPostProcessor于我在示例中指定的位置,但我不知道如何告诉这个模拟的jwt范围和角色。我至少尝试过这样的角色: jwt().authorities(new SimpleGrantedAuthority("ROLE_ADMIN"))但它不起作用,我总是得到 401 错误。

编辑:这是我在启用安全调试级别后发现的日志:

依赖项: