如何使用 Spring Security 在 Spring App 中测试 REST
Posted
技术标签:
【中文标题】如何使用 Spring Security 在 Spring App 中测试 REST【英文标题】:How to test REST in spring app with spring security 【发布时间】:2012-05-10 20:45:07 【问题描述】:我有带有球衣休息服务的 Spring Web 应用程序。然而,休息是通过弹簧安全保护的,登录过程很难从单元测试代码中执行。我想在禁用整个春季安全性的情况下测试休息服务。有没有可能?
【问题讨论】:
【参考方案1】:你没有说什么是“困难的”,所以我假设你在你的 REST 服务中有一些东西,即在你想要测试的 java 方法中,这需要身份验证结果。 Spring 具有用于模拟身份验证结果的实用程序。例如,您可以在 @Before
设置方法中执行以下操作:
Object principal = null; // fix this
Object credentials = null; // fix this
Authentication auth = new org.springframework.security.authentication.TestingAuthenticationToken(principal, credentials);
SecurityContextHolder.getContext().setAuthentication(auth);
但同样,你还没有说你真正想解决什么问题......
【讨论】:
【参考方案2】:只需将其作为 pojo 进行测试。传入任何内容,返回任何内容,根本不加载应用程序上下文 - 这将是一个集成测试。
能够在不加载框架的情况下轻松测试功能是 Spring 的主要优势之一。
【讨论】:
【参考方案3】:基于注释的 Web 服务的优点之一是您可以轻松地对它们进行单元测试。
class WebServiceEndpoint
@Path("/foo/fooId")
@POST
@Produces( MediaType.APPLICATION_XML )
public Response doFoo(@PathParam("fooId") Integer fooId)
/// ... web service endpoint implementation
如果你使用 Spring 的 servlet 过滤器来保证安全,那么 doFoo
方法中不应该有任何与安全相关的代码,所以你可以创建一个新的 WebServiceEndpoint
类并调用该方法。所以这是“禁用”安全性的一种方式。
当您说登录过程“困难”时,您是什么意思?如果您已成功登录一次,那么您可以在其他单元测试中重用相同的代码(例如在 @Before
方法中)。
【讨论】:
以上是关于如何使用 Spring Security 在 Spring App 中测试 REST的主要内容,如果未能解决你的问题,请参考以下文章
使用 Spring Security Saml 和 SP 应用程序的无状态会话
在期待多个应用程序时,我应该使用 Spring Security SAML 还是 Shiboleth SP?
Spring security Saml - SP 和 IDP 的时间差
如何使用 Spring MVC & Security、Jasig CAS 和 JSP 视图在 Spring Boot 2 中配置 UTF-8?