Spring MVC、Rest 和 Shiro。 @RequiresAuthentication 不起作用

Posted

技术标签:

【中文标题】Spring MVC、Rest 和 Shiro。 @RequiresAuthentication 不起作用【英文标题】:Spring MVC, Rest and Shiro. @RequiresAuthentication not works 【发布时间】:2015-02-25 12:48:56 【问题描述】:

我使用 Spring 4.1.2、Shiro 1.2.3(核心、web、spring)并且我正在创建 RestControllers。在示例中的类中,我使用 @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。我错过了什么?

【问题讨论】:

【参考方案1】:

我找到了答案。我必须在我的 Java Spring 配置中添加以下代码:

// 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;

【讨论】:

以上是关于Spring MVC、Rest 和 Shiro。 @RequiresAuthentication 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

spring mvc整合shiro无法访问控制器是啥问题

Spring MVC + Shiro + Junit 测试

Apache Shiro + Spring MVC

Spring MVC + Shiro 实现权限验证

Spring MVC、RESTful 服务和 Apache Shiro 策略

Shiro系列之Shiro+Spring MVC整合(Integration)