REST 服务的基于 Spring Security 的身份验证

Posted

技术标签:

【中文标题】REST 服务的基于 Spring Security 的身份验证【英文标题】:Spring Security based authentication for a REST service 【发布时间】:2011-08-16 21:05:43 【问题描述】:

我正在使用 Spring MVC 和 Spring Security(均为 3.0.5)实现 REST 服务。我正在使用安全命名空间,而不是手动定义 Spring bean。 我在登录过程中遇到了一些困难。我想要实现的是:

到 /login URL 的 POST 将开始身份验证过程。

应该没有实际的表单,所以我没有使用 form-login... 元素。如果没有这个元素,UsernamePasswordAuthenticationFilter 就不会出现在安全链上,所以我想我会通过 custom-filter... 元素添加它并从那里。

这是它的要点,不是为了问题:

这是实现身份验证的好方法吗? 我应该如何添加这个过滤器以及在过滤器链中的什么位置? 添加这个过滤器就足够了吗,还是我还需要其他东西?

感谢任何反馈。 谢谢。

【问题讨论】:

【参考方案1】:

一般来说,如果你想自定义你的身份验证,你应该使用 bean 配置。我发现基于命名空间的配置仅适用于演示应用程序。以下是我对您问题的回答:

1) 正如我上面所说,您应该使用 bean。查看这篇文章了解更多信息: http://blog.springsource.com/2010/03/06/behind-the-spring-security-namespace/ 但是你所追求的也可以满足你到目前为止提到的要求。 2) 应该这样添加:<http> <custom-filter position="FORM_LOGIN_FILTER" ref="myFilter" /> </http> <beans:bean id="myFilter" class="org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter"/>

3) 请注意,此过滤器还将执行默认重定向到原始请求。因此,如果您不需要任何重定向并且只需将简单的 HTTP 200 返回给客户端,您应该实现自己的 AuthenticationProcessingFilter。

希望对你有帮助。

【讨论】:

以上是关于REST 服务的基于 Spring Security 的身份验证的主要内容,如果未能解决你的问题,请参考以下文章

JAX-RS(基于Jersey) + Spring 4.x + MyBatis构建REST服务架构

Spring(002)-创建rest服务

为 iOS/Android 应用程序保护基于 REST 的服务的选项

使用 OData 接口开发 Spring REST 服务

Spring 3.0 - 无法找到 XML 模式命名空间的 Spring NamespaceHandler [http://www.springframework.org/schema/securit

Spring 3.0 - 无法找到 XML 模式命名空间的 Spring NamespaceHandler [http://www.springframework.org/schema/securit