2015-02-05 3 views
0

oauth2를 발견했습니다. 나는이 토큰에 의해 보호 된 JWToken과 REST를 리턴하는 샘플을 생성 할 수 있었다. 이제 보호 된 REST 인터페이스에 액세스 제어를 추가하여이 점을 개선하고 싶습니다. 왜? 내가 ADMIN과 같은 사용자를 원하기 때문에 독자는 URL에 액세스할지 여부를 결정합니다.스프링 보안이 oauth2 토큰으로 액세스 제어를 설정했습니다.

다음으로 http://projects.spring.io/spring-security-oauth/docs/oauth2.html http 노드의 over expression-handler가 가능합니다.

<sec:global-method-security 
    pre-post-annotations="enabled" /> 

<sec:http pattern="/protected/**" create-session="never" entry-point-ref="oauthAuthenticationEntryPoint"> 
    <sec:anonymous enabled="false" /> 
    <sec:intercept-url pattern="/protected/**" /> 
    <sec:custom-filter ref="resourceServerFilter" 
     before="PRE_AUTH_FILTER" /> 
    <sec:access-denied-handler ref="oauthAccessDeniedHandler" /> 
    <sec:expression-handler ref="myexpressionHandler" /> 
</sec:http> 

<bean id="myexpressionHandler" class="org.springframework.security.oauth2.provider.expression.OAuth2WebSecurityExpressionHandler"> 
</bean> 

로그 : févr 여기 난 내 XML의 구성에 추가 한 구성입니다. 04, 2015 4:09:31 PM org.springframework.security.config.method.GlobalMethodSecurityBeanDefinitionParser parse INFOS : 메서드 보안에 대해식이 활성화되었지만 SecurityExpressionHandler가 구성되지 않았습니다. 모든 hasPermision() 표현식은 false로 평가됩니다. févr. 04, 2015 4:09:31 PM org.springframework.security.config.http.HttpSecurityBeanDefinitionParser checkFilterChainOrder

그러나 JWTtoken을 사용하여 보호 된 리소스를 성공적으로 가져 왔습니다.

내 컨트롤러 :

@Component 
@RestController 
@RequestMapping(value = "/protected") 
public class HelloWorldRest { 

    private static final Logger LOG = LoggerFactory 
      .getLogger(HelloWorldRest.class); 

    private static final String template = "Hello, %s!"; 
    private final AtomicLong counter = new AtomicLong(); 

    @PreAuthorize("#oauth2.clientHasRole('ROLE_ADMIN')") 
    @RequestMapping(value = "/greeting/{name}") 
    public Greeting greeting(@PathVariable String name) { 
     LOG.info("Fonction greeting : " + name); 
     return new Greeting(counter.incrementAndGet(), String.format(template, 
       name + ", I am Mister Toto")); 
    } 

} 

나는 authoritiesGrant = {ROLE_NONE}

감사합니다, 어떤 아이디어를 내려면 사용자와 테스트 한?

답변

0

"SecurityExpressionHandler가 구성되었습니다."라는 오류 메시지가 표시되지 않도록하려면 전역 처리 방법 보안에 식 처리기를 추가해야합니다. 이처럼 :

<sec:global-method-security pre-post-annotations="enabled"> 
    <sec:expression-handler ref="oauthExpressionHandler" /> 
</sec:global-method-security> 
<oauth:expression-handler id="oauthExpressionHandler" /> 

당신은 추가로 사용할 수있는 대신에 (당신이 질문에 국방부대로) WebSecurityExpressionHandler에 대한 자신의 빈을 정의하는 :

<oauth:web-expression-handler id="oauthWebExpressionHandler" />