使用Spring Security保护REST API

时间:2014-01-29 12:05:29

标签: spring rest spring-mvc spring-security

我正在尝试为Spring应用程序实现REST API。由于每个人都可能无法访问资源,因此我需要一个安全层。

在这个应用程序中,我已经使用Spring Security(完全正常)来保护我的Web应用程序。

我已将以下http配置添加到我的spring-security.xml

<http pattern = "/api/**" use-expressions = "true" disable-url-rewriting = "true">
    <http-basic />
</http>

因此,我假设对以api/开头的网址发出的所有请求都将受到保护。

问题是我无需任何身份验证即可访问我的安全方法。但是,如果我使用REST客户端访问它,我会收到此错误:

message: Full authentication is required to access this resource
description: This request requires HTTP authentication.

我不知道如何继续。使用Spring Security保护REST API的最佳方法是什么?

3 个答案:

答案 0 :(得分:1)

如果您在应用程序中使用Spring Security,那么您的一个Spring配置文件中可能已经有<http>部分。您可以使用此部分来保护REST API。

<http>本身并不保护任何内容。您必须在其中添加<intercept-url>规则:

<intercept-url pattern="/api/**" access="hasRole('ROLE_USER')" />

答案 1 :(得分:0)

Spring的官方网站上有一个tuto。这有点复杂: Official Spring Tuto

答案 2 :(得分:0)

只需使用Spring Security。<http>标记中添加:<security:intercept-url pattern="your url" access="hasAnyRole('Your_User_Role1', 'Your_User_Role2')" />
或者尝试使用注释。在spring-config.xml中启用安全注释:
<security:global-method-security jsr250-annotations="enabled" pre-post-annotations="enabled" secured-annotations="enabled"/> 并在Controller中添加@PreAuthorize

@PreAuthorize("hasAnyRole('Your_User_Role1', 'Your_User_Role2')")
@RequestMapping(value = "/address_planing/load_employee_info")