shiro权限注解

一、注解解释

@RequiresAuthentication

表示subject已经通过登录验证,才可使用

@RequiresUser

表示subject已经身份验证或者通过记住我登录,才可使用

@RequiresGuest

表示subject没有身份验证或通过记住我登录过,即是游客身份,才可使用

@RequiresRoles(value={“admin”, “user”}, logical=Logical.AND)

表示subject需要xx(value)角色,才可使用

@RequiresPermissions (value={“user:a”, “user:b”},logical= Logical.OR)

表示subject需要xxx(value)权限,才可使用

二、示例

1、代码

注:连接均是可被匿名访问,控制器均是直接调用服务方法

服务

@Service
public class ShiroService {

    /**
     * 表示subject已经通过登录验证
     */
    @RequiresAuthentication
    public void testRequiresAuthentication(){
        System.out.println("testRequiresAuthentication");
    }
    /**
     * 表示subject已经身份验证或者通过记住我登录
     */
    @RequiresUser
    public void testRequiresUser(){
        System.out.println("testRequiresUser");
    }
    /**
     * 表示subject没有身份验证或通过记住我登录过,即是游客身份
     */
    @RequiresGuest
    public void testRequiresGuest(){
        System.out.println("testRequiresGuest");
    }
    /**
     * 表示subject需要admin角色
     */
    @RequiresRoles(value = {"admin"},logical = Logical.AND)
    public void testRequiresRoles(){
        System.out.println("testRequiresRoles");
    }
    /**
     * 表示subject需要权限user:create
     */
    @RequiresPermissions(value = {"user:create"},logical = Logical.AND)
    public void testRequiresPermissions(){
        System.out.println("testRequiresPermissions");
    }
}

2、不同情况下访问效果

1)未登录状态下访问

testRequiresAuthentication
异常

org.apache.shiro.authz.UnauthenticatedException: The current Subject is not authenticated.  Access denied.

在这里插入图片描述

testRequiresUser
异常

org.apache.shiro.authz.UnauthenticatedException: Attempting to perform a user-only operation.  The current Subject is not a user (they haven't been authenticated or remembered from a previous login).  Access denied.

在这里插入图片描述

testRequiresGuest
通过
在这里插入图片描述

testRequiresRoles
异常

org.apache.shiro.authz.UnauthenticatedException: This subject is anonymous - it does not have any identifying principals and authorization operations require an identity to check against.  A Subject instance will acquire these identifying principals automatically after a successful login is performed be executing org.apache.shiro.subject.Subject.login(AuthenticationToken) or when 'Remember Me' functionality is enabled by the SecurityManager.  This exception can also occur when a previously logged-in Subject has logged out which makes it anonymous again.  Because an identity is currently not known due to any of these conditions, authorization is denied.

在这里插入图片描述

testRequiresPermissions
异常

org.apache.shiro.authz.UnauthenticatedException: This subject is anonymous - it does not have any identifying principals and authorization operations require an identity to check against.  A Subject instance will acquire these identifying principals automatically after a successful login is performed be executing org.apache.shiro.subject.Subject.login(AuthenticationToken) or when 'Remember Me' functionality is enabled by the SecurityManager.  This exception can also occur when a previously logged-in Subject has logged out which makes it anonymous again.  Because an identity is currently not known due to any of these conditions, authorization is denied.

在这里插入图片描述

2)登录user用户(user角色)状态下访问

testRequiresAuthentication
通过
在这里插入图片描述

testRequiresUser
通过
在这里插入图片描述

testRequiresGuest
异常

org.apache.shiro.authz.UnauthenticatedException: Attempting to perform a guest-only operation.  The current Subject is not a guest (they have been authenticated or remembered from a previous login).  Access denied.

在这里插入图片描述

testRequiresRoles
异常

org.apache.shiro.authz.UnauthorizedException: Subject does not have role [admin]

在这里插入图片描述

testRequiresPermissions
异常

org.apache.shiro.authz.UnauthorizedException: Subject does not have permission [user:create]

在这里插入图片描述

3)登录admin用户(user、admin角色)状态下访问

testRequiresAuthentication
通过

在这里插入图片描述

testRequiresUser
通过

在这里插入图片描述

testRequiresGuest
异常

org.apache.shiro.authz.UnauthenticatedException: Attempting to perform a guest-only operation.  The current Subject is not a guest (they have been authenticated or remembered from a previous login).  Access denied.

在这里插入图片描述

testRequiresRoles
通过

在这里插入图片描述

testRequiresPermissions
异常

org.apache.shiro.authz.UnauthorizedException: Subject does not have permission [user:create]

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一个shiro的入门Demo.. 使用了Spring MVC,mybaits等技术.. 数据库设计 : User : name--password Role : id--userid--roleName Function : id--userid--url tinys普通用户只能访问index.jsp admin用户通过添加了admin的permission,所以可以访问admin.jsp role用户通过添加了role角色,所以可以访问role.jsp 这是最基本的shiro的运用..目的是让你快速了解shiro的机制.. 这个Demo体现shiro的地方主要在两个类以及shiro.xml的配置文件 CustomRealm : 处理了登录验证以及授权.. ShiroAction : 用来传递登录时的用户数据..转换为token传递给realm...之后根据结果做相应的逻辑处理.. shiro.xml : shiro的主要配置... 规则定义在以下地方 : <!-- 过滤链定义 --> <property name="filterChainDefinitions"> <value> /login.jsp* = anon /index.jsp* = authc /index.do* = authc /admin.jsp*=authc,perms[/admin] /role.jsp*=authc,roles[role] </value> </property> 2015-10-28更新 --通过添加了以下内容来使用注解方式配置权限.... <!-- Support Shiro Annotation 必须放在springMVC配置文件中 --> <!-- 异常处理,权限注解会抛出异常,根据异常返回相应页面 --> <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <property name="exceptionMappings"> <props> <prop key="org.apache.shiro.authz.UnauthorizedException">unauth</prop> <prop key="org.apache.shiro.authz.UnauthenticatedException">login</prop> </props> </property> </bean> <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" depends-on="lifecycleBeanPostProcessor" /> <bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor"> <property name="securityManager" ref="securityManager" /> </bean> <!-- end --> --修改了过滤链 <!-- 过滤链定义 --> //简单的讲就是把需要特别处理的路径写到前面,越特殊写到越前 <property name="filterChainDefinitions"> <value> <!-- 注意这里需要把前缀写全.../shiro这里 --> /shiro/login.do*=anon /login.jsp* = anon /admin.jsp*=authc,perms[/admin] /role.jsp*=authc,roles[role] /** = authc </value> </property>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值