2014-04-07 4 views
0

실제 최종 사용자가 RESTful 서비스를 통해서만 서버와 상호 작용할 수있는 간단한 응용 프로그램을 실제로 만들려고합니다. 사용자 인터페이스는 angularjs를 사용하여 이러한 서비스에 아약스 요청을 보낸 다음 브라우저에서 응답을 렌더링합니다.Grails - 기본 인증을 사용하는 스프링 보안

보안 계층을 만들려면 스프링 보안 플러그인을 구성하려고하지만 구성에 문제가 있습니다. 이 순간에 내 설정 :

내 구성을 그대로 유지하면 모든 사람, 심지어/rest/** 리소스까지 모두 사용할 수 있습니다. 제 생각 엔 chainMap이 모든 것을 망치기 전의 staticRules입니다. 그러나 문제는 내가 그것을 제거하면, 모든 것이 나의 기본적인 인증에 해당된다는 것입니다 ...

그래서/rest/** 아래의 모든 리소스는 기본 인증과 내 SPA (단일 페이지 응용 프로그램), 루트 컨텍스트 ('/')에서 액세스 할 수있는 모든 승인없이 사용할 수 있습니다 ...

여기에 내가 무엇이 있습니까?

답변

2

/** = permitAll이있는 경우 URL이 필터 체인에서 분할되는 방식은 중요하지 않습니다. 아무 것도 차단하지 않습니다. 당신은 또한 액세스 규칙을 분할 그냥 버트의 정답에 자세히 설명하는

grails.plugin.springsecurity.controllerAnnotations.staticRules = [ 
    '/rest/**': ['ROLE_ADMIN'], 
    '/**': ['permitAll'] 
] 
1

같은 뭔가가 필요, 당신은 당신이 docs for the plugin에서 알아야 할 모든 것을 찾을 수 있습니다.

"permitAll"표현은 기본적으로 해당 URL을 공개적으로 액세스 할 수있게합니다. 이 경우 "/ **"URL은 해당 URL이며 도메인 아래의 모든 가능한 URL에 해당합니다. 따라서 staticRules 구성을 사용하면 전체 애플리케이션에 공개적으로 액세스 할 수 있습니다.

이 솔루션은 '(공개적으로 접근 가능한 자원 ('/ /이미지/ ','/ 로그인/'등)에서 "permitAll"표현식을 지정하고 확보하는 URL의 대체 표현을 지정하는 것입니다/admin/ * '등).

"permitAll"표현식은 Spring Expression Language (SpEL)의 멤버입니다. 필자가 링크 한 문서 맨 아래에 많은 SpEL 표현식이있는 표가 있습니다. SpEL을 사용하면 애플리케이션에 대한 모든 종류의 액세스 규칙을 구성 할 수 있습니다. 예 :

grails.plugin.springsecurity.controllerAnnotations.staticRules = [ 
    '/**/images/**': ['permitAll'],  // publicly accessible images directory 
    '/register': ['isAnonymous()'],  // has to be anonymous to register 
    '/profile/**': ['isAuthenticated()'], // has to be authenticated 
    '/lounge/**': ['ROLE_USER', 'ROLE_ADMIN'], // has user or admin role 
    '/admin/**': ['ROLE_ADMIN']   // has to be an administrator 
] 

더 많은 옵션이 가능하며 문서는 유용한 정보입니다.

관련 문제