如何使用spring security在spring应用程序中测试REST

时间:2012-05-01 09:18:06

标签: spring testing rest spring-security jersey

我有春季网络应用程序与球衣休息服务。但是,通过弹簧安全保护休息,并且从单元测试代码很难执行登录过程。我想在禁用整个弹簧安全性的情况下测试休息服务。它甚至可能吗?

3 个答案:

答案 0 :(得分:0)

基于注释的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方法中)。

答案 1 :(得分:0)

将它作为一个pojo进行测试。传递任何东西,返回任何内容,根本不加载应用程序上下文 - 这将是一个集成测试。

在没有加载框架的情况下轻松测试功能的能力是spring的主要优势之一。

答案 2 :(得分:0)

你没有说什么是“难”,所以我假设你的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);

但是,你还没有说出你实际想要解决的问题......