春天:嘲笑安全增强服务



我们在服务层中嵌入了部分安全性,因此我@PreAuthorize注释添加到一些MyService方法中。

MyServiceSecurityTest,我只想测试安全角色权限矩阵,没有任何业务逻辑。出于这个原因,我不得不嘲笑MyService.问题是 Mockito 和 Spring 安全性都使用 CGLIB 代理,而且我的服务在Mockito.mock(MyService.class)后没有通过@PreAuthorize增强。

有没有办法模拟服务并保留@PreAuthorize逻辑?


例:

@Service
public class MyService implements IMyService {
@Override
@PreAuthorize("hasAuthority('SYSOP')")
public void someMethod(ComplexDTO dto) {
// lots of logic and dependencies, require lots of stubbing.
}
}

为了避免初始化MyService#someMethod的所有依赖项并在MyServiceSecurityTest构建ComplexDTO,我想模拟MyServiceSecurityTest但保留@PreAuthorize检查。

您需要执行集成测试,而不是单元测试。 一般来说,你在集成测试中看不到模拟类,至少你不会模拟你正在测试的类,在这种情况下,我猜它是MyService类。

设置集成测试需要继续阅读,但下面的简短示例应该会让你走上正确的道路

@RunWith(SpringRunner.class)
@SpringBootTest
@ActiveProfiles("myProfile")
public class MyServiceIT {
private final Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private TestRestTemplate restTemplate;
@Test
public void testMyService() {
logger.info("testMyService");
//user TestRestTemplate to call your service.
}
}

编辑:在此集成测试中,Spring正常启动。 这意味着所有的安全性注释都已处理,并且需要创建的所有 bean 都已创建并正确注入。 您可能必须控制的一件事是弹簧配置文件。这可以通过我刚刚添加到示例中的@ActiveProfiles("myProfile")注释来完成。

相关内容

  • 没有找到相关文章

最新更新