精华内容
下载资源
问答
  • shiro注解权限控制-5个权限注解

    万次阅读 多人点赞 2017-06-12 15:45:46
    shiro注解权限控制-5个权限注解Shiro共有5个注解,接下来我们就详细说说吧 RequiresAuthentication: 使用该注解标注的类,实例,方法在访问或调用时,当前Subject必须在当前session中已经过认证。RequiresGuest: ...

    shiro注解权限控制-5个权限注解

    Shiro共有5个注解,接下来我们就详细说说吧

    • RequiresAuthentication:

      使用该注解标注的类,实例,方法在访问或调用时,当前Subject必须在当前session中已经过认证。

    • RequiresGuest:

      使用该注解标注的类,实例,方法在访问或调用时,当前Subject可以是“gust”身份,不需要经过认证或者在原先的session中存在记录。

    • RequiresPermissions:

      当前Subject需要拥有某些特定的权限时,才能执行被该注解标注的方法。如果当前Subject不具有这样的权限,则方法不会被执行。

    • RequiresRoles:

      当前Subject必须拥有所有指定的角色时,才能访问被该注解标注的方法。如果当天Subject不同时拥有所有指定角色,则方法不会执行还会抛出AuthorizationException异常。

    • RequiresUser

      当前Subject必须是应用的用户,才能访问或调用被该注解标注的类,实例,方法。


    使用方法:

    Shiro的认证注解处理是有内定的处理顺序的,如果有个多个注解的话,前面的通过了会继续检查后面的,若不通过则直接返回,处理顺序依次为(与实际声明顺序无关):

    RequiresRoles
    RequiresPermissions
    RequiresAuthentication
    RequiresUser
    RequiresGuest

    例如:你同时声明了RequiresRoles和RequiresPermissions,那就要求拥有此角色的同时还得拥有相应的权限。

    1) RequiresRoles

    • 可以用在Controller或者方法上。可以多个roles,多个roles时默认逻辑为 AND也就是所有具备所有role才能访问。
    @Target({ElementType.TYPE, ElementType.METHOD})
    @Retention(RetentionPolicy.RUNTIME)
    public @interface RequiresRoles {
        String[] value();
        Logical logical() default Logical.AND; 
    }
    • 示例
    //属于user角色
    @RequiresRoles("user")
    
    //必须同时属于user和admin角色
    @RequiresRoles({"user","admin"})
    
    //属于user或者admin之一;修改logical为OR 即可
    @RequiresRoles(value={"user","admin"},logical=Logical.OR)

    2) RequiresPermissions

    • 与 RequiresRoles类似
    @Target({ElementType.TYPE, ElementType.METHOD})
    @Retention(RetentionPolicy.RUNTIME)
    public @interface RequiresPermissions {
        String[] value();
        Logical logical() default Logical.AND; 
    }
    • 示例
    //符合index:hello权限要求
    @RequiresPermissions("index:hello")
    
    //必须同时复核index:hello和index:world权限要求
    @RequiresPermissions({"index:hello","index:world"})
    
    //符合index:hello或index:world权限要求即可
    @RequiresPermissions(value={"index:hello","index:world"},logical=Logical.OR)

    3) RequiresAuthentication,RequiresUser,RequiresGuest

    • 这三个的使用方法一样
    @RequiresAuthentication
    @RequiresUser
    @RequiresGusst
    注:Shiro依赖于slf4j,commons-beanutils,commons-logging三个jar包。
    展开全文
  • shiro注解权限控制-5个权限注解 Shiro共有5个注解,接下来我们就详细说说吧 1.@RequiresAuthentication: 使用该注解标注的类,实例,方法在访问或调用时,当前Subject必须通过login 进行了身份验证;即 Subject....

    shiro提供了相应的注解用于权限控制,如果使用这些注解就需要使用aop的功能来进行判断。shiro提供了spring aop集成,用于权限注解的解析和验证

    shiro注解权限控制-5个权限注解

    Shiro共有5个注解,接下来我们就详细说说吧

    1.@RequiresAuthentication:

    使用该注解标注的类,实例,方法在访问或调用时,当前Subject必须通过login 进行了身份验证;即 Subject.isAuthenticated() 返回 true

    2.@RequiresUser:

    表示当前 Subject 已经身份验证或者通过记住我登录的,才能访问或调用被该注解标注的类,实例,方法。

    3.@RequiresGuest:

    使用该注解标注的类,实例,方法在访问或调用时,当前Subject可以是“gust”身份,不需要经过身份验证或通过记住我登录过,即是游客身份

    4.@RequiresRoles:

    当前Subject必须拥有所有指定的角色时,才能访问被该注解标注的方法。如果当前Subject不同时拥有所有指定角色,则方法不会执行还会抛出AuthorizationException异常。

    如:@RequiresRoles(value={“admin”, “user”}, logical= Logical.AND): 表示当前 Subject需要角色 admin 和user

    5.@RequiresPermissions:

    当前Subject需要拥有某些特定的权限时,才能执行被该注解标注的方法。如果当前Subject不具有这样的权限,则方法不会被执行。

    如:@RequiresPermissions (value={“user:a”, “user:b”}, logical= Logical.OR):表示当前 Subject 需要权限 user:a 或user:b

    使用方法:

    Shiro的认证注解处理是有内定的处理顺序的,如果有个多个注解的话,前面的通过了会继续检查后面的,若不通过则直接返回,处理顺序依次为(与实际声明顺序无关)

    RequiresRoles
    RequiresPermissions
    RequiresAuthentication
    RequiresUser
    RequiresGuest

    例如:你同时声明了RequiresRoles和RequiresPermissions,那就要求拥有此角色的同时还得拥有相应的权限。

    1.RequiresRoles的使用
    可以用在Controller或者方法上。可以多个roles,多个roles时默认逻辑为 AND也就是所有具备所有role才能访问。

    示例

    //属于user角色
    @RequiresRoles("user")
    
    //必须同时属于user和admin角色
    @RequiresRoles({"user","admin"})
    
    //属于user或者admin之一;修改logical为OR 即可
    @RequiresRoles(value={"user","admin"},logical=Logical.OR)
    

    2.RequiresPermissions的使用
    与 RequiresRoles类似

    //符合index:hello权限要求
    @RequiresPermissions("index:hello")
    
    //必须同时复核index:hello和index:world权限要求
    @RequiresPermissions({"index:hello","index:world"})
    
    //符合index:hello或index:world权限要求即可
    @RequiresPermissions(value={"index:hello","index:world"},logical=Logical.OR)
    

    3.RequiresAuthentication,RequiresUser,RequiresGuest的使用
    这三个的使用方法一样:

    @RequiresAuthentication
    @RequiresUser
    @RequiresGusst
    

    注:Shiro依赖于slf4j,commons-beanutils,commons-logging三个jar包。

    RequiresRoles的使用:
    1.在原有项目基础上 新建 service,编写如下方法
    在这里插入图片描述
    2.修改controller,添加如下方法:

        @Autowired
    	private ShiroService shiroService;
    	
    	/**
    	 * 测试 权限注解
    	 * @return
    	 */
    	@RequestMapping("/testShiroAnnotation")
    	public ModelAndView testShiroAnnotation(){
    		shiroService.testMethod();
    		return new ModelAndView("list");
    	}
    

    3.修改 applicationContext.xml,添加 service 扫码bean

    <bean id="shiroService" class="com.example.shiro.service.ShiroService"></bean>
    

    4.在 list.jsp页面添加 testShiroAnnotation 访问链接:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@taglib prefix="shiro" uri="http://shiro.apache.org/tags"%>    
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>list</title>
    </head>
    <body>
      
      <h3>list Page</h3>
      <div>欢迎:<shiro:principal></shiro:principal>登录</div>
      
      <shiro:hasRole name="admin">
         <a href="toAdmin">Admin page</a><br>
      </shiro:hasRole>
      
      <shiro:hasRole name="user">
        <a href="toUser">User page</a><br>
      </shiro:hasRole>
       <a href="testShiroAnnotation">测试 shiro 权限注解</a><br>
      <a href="logout">logout</a>
    </body>
    </html>
    

    5.登录用户,进行测试
    (1)登录admin:
    在这里插入图片描述
    结果:控制台输出 方法信息
    在这里插入图片描述
    (2)登录user,同样的方式测试 shiro权限注解,报错Subject does not have role [admin]
    在这里插入图片描述
    测试成功

    展开全文
  • shiro Action方法注解权限控制 底层基于代理技术实现,为Action创建代理对象,由代理对象进行权限校验. 就是在方法前面加上一个注解,要求执行方法用户必须要有权限 方法前面加了一个注解,shiro框架就给方法创建...

    通过注解 代理的可以是service或者action等,当他们被调用时由代理对象生效,由框架控制

     shiro Action方法注解权限控制

    底层基于代理技术实现,为Action创建代理对象,由代理对象进行权限校验.

    就是在方法前面加上一个注解,要求执行方法用户必须要有权限


    方法前面加了一个注解,shiro框架就给方法创建一个代理对象(注解不是代理对象),然后由代理对象权限校验调用方法,抛出异常

     

     spring service方法注解事务控制

    比如现在service的注解控制事务,前面加了一个标识@Transctional,那么我们再调用这个serviceimpl的时候,那么spring提供给你的就是一个代理对象,事务的控制就是在这里进行的,如果不加标识的话,那么spring提供的就是一个普通对象,自然没有事务控制


    这里可以用debug看一下,加了注解产生的不是一般的service对象


    转载于:https://www.cnblogs.com/fengnan/p/9311951.html

    展开全文
  • 应用于类、方法上的5个常用注解详解:RequiresAuthentication:使用该注解标注的类,实例,方法在访问或调用时,当前Subject必须在当前session中已经过认证。RequiresGuest:使用该注解标注的类,实例,方法在访问或...
    应用于类、方法上的5个常用注解详解:
    • RequiresAuthentication:
    使用该注解标注的类,实例,方法在访问或调用时,当前Subject必须在当前session中已经过认证。
    • RequiresGuest:
    使用该注解标注的类,实例,方法在访问或调用时,当前Subject可以是“gust”身份,不需要经过认证或者在原先的session中存在记录。
    • RequiresPermissions:
    当前Subject需要拥有某些特定的权限时,才能执行被该注解标注的方法。如果当前Subject不具有这样的权限,则方法不会被执行。
    • RequiresRoles:
    当前Subject必须拥有所有指定的角色时,才能访问被该注解标注的方法。如果当天Subject不同时拥有所有指定角色,则方法不会执行还会抛出AuthorizationException异常。
    • RequiresUser
    当前Subject必须是应用的用户,才能访问或调用被该注解标注的类,实例,方法。

    Shiro的认证注解处理是有内定的处理顺序的,如果有个多个注解的话,前面的通过了会继续检查后面的,若不通过则直接返回,处理顺序依次为(与实际声明顺序无关):
    RequiresRoles
    RequiresPermissions
    RequiresAuthentication
    RequiresUser
    RequiresGuest
    1) RequiresRoles
    • 可以用在Controller或者方法上。可以多个roles,多个roles时默认逻辑为 AND也就是所有具备所有role才能访问。
    • 示例
    //属于user角色@RequiresRoles("user")
    //必须同时属于user和admin角色@RequiresRoles({"user","admin"})
    //属于user或者admin之一;修改logical为OR 即可@RequiresRoles(value={"user","admin"},logical=Logical.OR)

    2) RequiresPermissions
    • 与 RequiresRoles类似,访问某个方法或类时,当前用户必须拥有注解中的权限
    • 示例
    //符合index:hello权限要求@RequiresPermissions("index:hello")//必须同时复核index:hello和index:world权限要求@RequiresPermissions({"index:hello","index:world"})//符合index:hello或index:world权限要求即可@RequiresPermissions(value={"index:hello","index:world"},logical=Logical.OR)

    3) RequiresAuthentication,RequiresUser,RequiresGuest
    • 这三个的使用方法一样。直接添加注解使用,不用再添加什么参数
    @RequiresAuthentication@RequiresUser@RequiresGusst
    展开全文
  • Shiro权限控制(三):Shiro注解权限验证

    千次阅读 2019-04-10 23:56:42
    在前面的一篇博文中《Shiro权限控制之自定义Filter(二)》,我们的权限验证是配置在shiro配置文件中的,即在spring-shiro-web.xml中的ShiroFilterFactoryBean的filterChainDefinitions属性中,如下 <!-- Shiro的...
  • 1 学习计划 1、在realm中进行授权 2、使用shiro的方法注解方式权限控制 n在spring文件中配置开启shiro注解支持 n在Action方法上使用注解 3、★使用shiro的标签进行权限...n方法注解权限控制 n页面标签权限控...

空空如也

空空如也

1 2 3 4 5 ... 19
收藏数 376
精华内容 150
关键字:

shiro注解权限控制