问题标签 [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 投票
2 回答
193 浏览

java - 库模块中的 Spring Boot 测试 @PreAuthorize

我有一个使用 Spring Boot 1.5.21 编写的库模块。

该库有一个@Service带有注释的方法,@PreAutorize仅允许具有ADMIN权限的用户执行某些操作,例如delete

然后我有一个使用该库的 Spring Boot 应用程序。如果我运行该应用程序并手动测试它,它就可以工作。只有管​​理员可以删除。我想为它写测试。

我正在考虑为模块和主应用程序编写单独的测试。在我的模块中,我可以成功地对操作进行单元测试。但是我在测试时遇到了麻烦@PreAuthotize,因为模块中不存在安全上下文,而是在主应用程序中。有没有办法在模块中测试该注释,而不是在主应用程序中?

我的库的相关代码:

我正在尝试添加@EnableGlobalMethodSecurity(prePostEnabled = true)但没有运气。如前所述,SecurityConfiguration 加载在主应用程序中,它不存在于库模块中。

我可以@PreAuthorize在模块中测试还是应该将其移动到主应用程序?如果可能的话,我想把它放在模块中。或者也许我可以创建一个仅用于测试的上下文,但不知道该怎么做。

0 投票
1 回答
1465 浏览

java - 在 Oauth2 安全(客户端凭据)资源服务器应用程序中为 WebFluxTest 获取 403 禁止

我有一个反应式(Spring WebFlux)网络应用程序,其中我有几个受保护资源的 REST API。(Oauth2)。要手动访问它们,我需要获取具有客户端凭据授予类型的授权令牌并在请求中使用该令牌。

现在,我需要编写可以通过 Spring 的 WebTestClient 调用来调用 API 的测试。我在尝试访问 API 时被禁止 403。编写测试用例时我在哪里做错了。

以下是我的安全配置:

注意:-我需要这个 webclient bean,因为在那个过滤器(我添加到 SecurityWebFilterChain)中我正在调用另一个受保护的资源/API,并且该 API 的响应是在反应上下文中设置的

我的应用程序 yaml:

我的控制器:

我的测试用例:

注意:-我不能通过不使用我的 WebSecurityConfiguration 类来绕过。因为在 websecurityconfiguration 中添加的过滤器中设置了反应上下文。

0 投票
1 回答
9 浏览

spring-security-test - 在测试中更改授权用户

我想在一个测试中测试一组具有不同角色的用户对方法的访问。我正在尝试像这样更改登录用户:

但无论我多么努力,perform(get (...))总是从ALL_ROLES_USERS数组中的第一个用户执行。这可以从日志中看出:

- 每次迭代都是同一个用户!

知道为什么会发生这种情况吗?也许perform(get(...))正在传递第一个用户的JSESSIONID?我不知道在哪里挖了

0 投票
1 回答
41 浏览

spring - Spring Security:hasRole 不起作用 & AuthenticaionPrincipal 为空

我有一个 PUT 映射控制器方法,该方法应仅限于具有 ROLE_BUYER 角色的用户。但是,在测试期间,它会向没有该角色的用户返回 200 OK。控制器方法被调用,但@AuthenticationPrincipalHttpServletRequest.getRemoteUser()都是null

控制器:

安全配置:

测试方法:

这是测试设置:

LibraryUser是一个实现UserDetails.

是测试本身的问题WebSecurityConfigurerAdapter还是测试本身的问题?

0 投票
0 回答
25 浏览

spring-security - Spring Security 请求基本身份验证,即使它被禁用(反应式)

下面的 spring 安全配置给出了一些意想不到的行为。

当向某个(非健康检查)端点(/用户)、在浏览器中以及使用 curl(通过 Windows 上的 git bash)发出请求时,未经身份验证的请求会按预期返回 idp 重定向。

但是,当使用 WebTestClient 时,它会返回401 Unauthorized.www-authenticate: [Basic ...]

在这种情况下对基本身份验证的请求(以及启动时生成的密码)是意外的,因为我已声明通过http.httpBasic().disable().

为什么会有这种反应?有没有更好的方法来覆盖默认的基本身份验证配置?是否按照本文中的建议对这些配置进行了排序?这是在哪里记录的?

github上的项目:https ://github.com/segevmalool/spring-samples/blob/main/spring-security-webflux-postgres

0 投票
0 回答
10 浏览

java - 我如何在 Spring Boot Security 中测试登录成功处理程序的 aop

我的 AOP 是@AfterReturing,切入点是注解。这是一个简单的例子。

如果登录过程成功,我想对 AOP 进行单元测试doSomething()

我如何在没有@SpringBootTest, 使用的情况下进行测试@WebMvcTest

我已经测试过这种方式

但这样我就不得不对每个控制器的模拟 bean、拦截器和相关 bean。我怎样才能用just测试登录过程LoginSucessHandler