spring-security - 如何在 Spring 测试中模拟 OAuth2Authentication 对象
问题描述
我想在春天测试我的休息控制器。在我的服务中,用户需要传递身份验证令牌。我使用一个令牌实用程序类来解码令牌并获取组织 ID。然后我将 id 用于多个进程。我如何在 Spring 中模拟这个?我已遵循此文档,但在运行测试时收到 404。
待办事项控制器
@RequestMapping("todos")
class TodoController {
@Autowired
lateinit var todoService: TodoService
@Autowired
lateinit var tokenUtils: TokenUtils
@GetMapping
fun getAllTodos(authentication: OAuth2Authentication): ResponseEntity<List<Todo>> {
tokenUtils.init(authentication);
val organizationId = tokenUtils.organizationId
return ResponseEntity.ok(todoService.findAll(organizationId))
}```
I am a bit new to spring tests and will appreciate any help accorded
解决方案
首先,您需要创建一个实现 Authentication 接口的模拟 Authentication 类。以下大部分代码是自动生成的。覆盖您需要的任何方法(在这种情况下,我只覆盖 getPrincipal 方法)。
import java.util.Collection;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority;
public class MockPrincipal implements Authentication {
public MockPrincipal() {}
@Override
public String getName() {
// TODO Auto-generated method stub
return null;
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
// TODO Auto-generated method stub
return null;
}
@Override
public Object getCredentials() {
// TODO Auto-generated method stub
return null;
}
@Override
public Object getDetails() {
// TODO Auto-generated method stub
return null;
}
@Override
public Object getPrincipal() {
// TODO Auto-generated method stub
return "mock user";
}
@Override
public boolean isAuthenticated() {
// TODO Auto-generated method stub
return false;
}
@Override
public void setAuthenticated(boolean isAuthenticated) throws IllegalArgumentException {
// TODO Auto-generated method stub
}
}
之后,您可以像这样模拟 OAuth2Authentication 对象:
MockPrincipal mockUser = new MockPrincipal();
OAuth2Authentication mockOAuth2Object = new OAuth2Authentication(null, mockUser);
推荐阅读
- azure - Azure AD 限制和配额是否也适用于 Azure AD B2C?
- java - Java Spring中的对数组特定对象求和
- javascript - 提示用户输入一个字符/字符串并判断输入是否在给定的字符串中
- angular - How to fire an event when ag-grid in Angular is loaded?
- css - 引导表在模态中不响应
- c# - 在 .NET Core 3.1 中执行存储过程
- python-xarray - 使用 map_blocks 沿指定维度求和
- database - ER图(是否创建新实体)
- excel - 如何在openpyxl的数据验证列表中显示/显示超过8行?
- msal.js - 保存 MSAL 缓存,即使在重新加载浏览器时也是如此?