我正在尝试为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的最佳方法是什么?
答案 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")