2014-01-29 9 views
0

스프링 애플리케이션을위한 REST API를 구현하려고합니다. 모든 사람이 액세스 할 수없는 리소스가 있으므로 보안 레이어가 필요합니다.스프링 보안으로 REST API 보안하기

내 응용 프로그램 보안을 위해 이미 스프링 보안 (완벽하게 작동 함)을 사용하고 있습니다.

spring-security.xml에 다음 http 구성을 추가했습니다 :

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

그래서 내가 api/로 시작하는 URL로 만든 모든 요청을 보호한다고 가정합니다.

문제은 인증없이 내 보안 된 방법에 액세스 할 수 있다는 것입니다. 그러나 REST 클라이언트를 사용하여 액세스하면 다음 오류가 발생합니다.

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

진행 방법을 모른다. Spring Security를 ​​사용하여 REST API를 보호하는 가장 좋은 방법은 무엇입니까?

+0

어떻게 당신은 당신이 인증없이 그들을 볼 말을 당신의 확보 방법을 액세스합니까? 브라우저를 통해? 이미 로그인 한 사용자가있는 브라우저에 있습니까? – nobeh

답변

1

응용 프로그램에서 스프링 시큐리티를 사용한다면 아마도 스프링 설정 파일 중 하나에 이미 <http> 섹션이있을 것입니다. 이 섹션을 사용하여 REST API를 보호 할 수 있습니다.

<http>은 아무 것도 보호하지 않습니다. 그 안에 <intercept-url> 개의 규칙을 추가해야합니다 :

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

하지만 컨트롤러에서 @PreAuthorize를 사용하고 있습니다. 그래서 나는 그것을 필요로하지 않는다고 생각했다. 다른'http' 섹션에서는 사용하지 않습니다. 어쨌든, 문제는 브라우저를 통한 인증이 잘 작동하지만 내 REST 클라이언트에서는 작동하지 않는다는 것입니다. – mhmpl

0

봄의 공식 사이트에는 tuto가 있습니다. 조금 더 복잡합니다 : Official Spring Tuto

+0

JavaConfig를 사용하지 않고 두 가지 보안 컨텍스트 (webapp 및 나머지 api)가 있습니다. – mhmpl

0

스프링 보안을 사용하면됩니다.<http> 태그에 추가 : <security:intercept-url pattern="your url" access="hasAnyRole('Your_User_Role1', 'Your_User_Role2')" />.
annotations을 사용해보세요.
<security:global-method-security jsr250-annotations="enabled" pre-post-annotations="enabled" secured-annotations="enabled"/> 및 컨트롤러에 @PreAuthorize을 추가 : 당신의 봄-config.xml 파일에서 보안 주석을 가능하게

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