2014-12-29 1 views
2

저는 Spring 4.1.2, Shiro 1.2.3 (코어, 웹, 스프링)을 사용하며 RestControllers를 만듭니다. 예제에서와 같이 클래스에 @RequiresAuthentication 주석을 사용하여 메소드에 액세스하지 못하도록합니다.봄 MVC, 나머지 및 시로. @RequiresAuthentication이 작동하지 않습니다

@RestController 
@RequestMapping("/api") 
public class CarController { 

    @RequestMapping("/secure") 
    @RequiresAuthentication 
    public String secure() { 
     Subject subject = SecurityUtils.getSubject(); 
     return "Should be 'true' == " + subject.isAuthenticated(); 
    } 


    @RequestMapping("/insecure") 
    public String insecure() { 
     Subject subject = SecurityUtils.getSubject(); 
     return "Should be 'false' == " + subject.isAuthenticated(); 
    } 
} 

불행히도 나는 두 가지 방법 모두에 액세스 할 수 있습니다. 둘 다 subject.isAuthenticated()의 결과로 false을 반환합니다. 내가 뭘 놓치고 있니?

답변

4

답변을 찾았습니다. 코드 다음에 Java Spring Configuration에 추가해야했습니다.

// enable shiro annotations 
@DependsOn("lifecycleBeanPostProcessor") 
@Bean 
public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() { 
    DefaultAdvisorAutoProxyCreator proxyCreator = new DefaultAdvisorAutoProxyCreator(); 
    proxyCreator.setProxyTargetClass(true); 
    return proxyCreator; 
} 

// enable shiro annotations 
@Bean 
public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor() { 
    AuthorizationAttributeSourceAdvisor advisor = new AuthorizationAttributeSourceAdvisor(); 
    advisor.setSecurityManager(securityManager); 
    return advisor; 
}