Shiro中@RequiresAuthentication等等注解介绍

使用前请先开启Shiro的controller层注解,如果已经设置请下滑绕过

要在spring-mvc.xml中写。

    <!--下面的用于开启shiro的权限注解-->
    <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"
          depends-on="lifecycleBeanPostProcessor">
        <property name="proxyTargetClass" value="true"/>
    </bean>
    <bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
        <property name="securityManager" ref="securityManager"/>
    </bean>

 

如果在是springboot中

/**
 * 下面2个支持controller层注解实现权限控制
 *
 * @return
 */
    @Bean(name = "advisorAutoProxyCreator")
    public DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator() {
        DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator();
        advisorAutoProxyCreator.setProxyTargetClass(true);
        return advisorAutoProxyCreator;
    }

    @Bean(name = "authorizationAttributeSourceAdvisor")
    public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(@Qualifier("securityManager") SecurityManager securityManager) {
        AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
        authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
        return authorizationAttributeSourceAdvisor;
    }

 

———————————————————进入正题———————————————————————

@RequiresAuthentication

  验证用户是否登录,等同于方法subject.isAuthenticated() 结果为true时。

@RequiresUser

  验证用户是否被记忆,user有两种含义:

  一种是成功登录的(subject.isAuthenticated() 结果为true);

  另外一种是被记忆的(subject.isRemembered()结果为true)。

@RequiresGuest

  验证是否是一个guest的请求,与@RequiresUser完全相反。

   换言之,RequiresUser  == !RequiresGuest。

  此时subject.getPrincipal() 结果为null.

@RequiresRoles

  例如:@RequiresRoles("aRoleName");

   void someMethod();

  如果subject中有aRoleName角色才可以访问方法someMethod。如果没有这个权限则会抛出异常AuthorizationException。

@RequiresPermissions

  例如: @RequiresPermissions({"file:read", "write:aFile.txt"} )
   void someMethod();

  要求subject中必须同时含有file:read和write:aFile.txt的权限才能执行方法someMethod()。否则抛出异常AuthorizationException。
---------------------
原文:https://blog.csdn.net/anmoyyh/article/details/74742772

 

posted @ 2019-06-16 16:45  海角的远方  阅读(15570)  评论(0编辑  收藏  举报