前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Shiro高级及与项目的认证授权(四)

Shiro高级及与项目的认证授权(四)

作者头像
用户1289394
发布2023-09-27 09:23:12
1570
发布2023-09-27 09:23:12
举报
文章被收录于专栏:Java学习网Java学习网

1.5.2 基于注解的授权

(1)RequiresPermissions

配置到方法上,表明执行此方法必须具有指定的权限

代码语言:javascript
复制
//查询
    @RequiresPermissions(value = "user-find")
    public String find() {
        return "查询用户成功";
   }

(2)RequiresRoles

配置到方法上,表明执行此方法必须具有指定的角色

代码语言:javascript
复制
  //查询
    @RequiresRoles(value = "系统管理员")
    public String find() {
        return "查询用户成功";
   }

基于注解的配置方式进行授权,一旦操作用户不具备操作权限,目标方法不会被执行,而且会抛出AuthorizationException 异常。所以需要做好统一异常处理完成未授权处理

2 Shiro中的会话管理

在shiro里所有的用户的会话信息都会由Shiro来进行控制,shiro提供的会话可以用于JavaSE/JavaEE环境,不依赖于任何底层容器,可以独立使用,是完整的会话模块。通过Shiro的会话管理器(SessionManager)进行统一的

会话管理

2.1 什么是shiro的会话管理

SessionManager(会话管理器):管理所有Subject的session包括创建、维护、删除、失效、验证等工作。

SessionManager是顶层组件,由SecurityManager管理

shiro提供了三个默认实现:

1. DefaultSessionManager:用于JavaSE环境

2. ServletContainerSessionManager:用于Web环境,直接使用servlet容器的会话。

3. DefaultWebSessionManager:用于web环境,自己维护会话(自己维护着会话,直接废弃了Servlet容器的会话管理)。

在web程序中,通过shiro的Subject.login()方法登录成功后,用户的认证信息实际上是保存在HttpSession中的通过如下代码验证。

代码语言:javascript
复制
//登录成功后,打印所有session内容
 @RequestMapping(value="/show") 
    public String show(HttpSession session) {
        // 获取session中所有的键值
        Enumeration<?> enumeration = session.getAttributeNames();
        // 遍历enumeration中的
        while (enumeration.hasMoreElements()) {
            // 获取session键值
            String name = enumeration.nextElement().toString();
            // 根据键值取session中的值
            Object value = session.getAttribute(name);
            // 打印结果
            System.out.println("<B>" + name + "</B>=" + value + "<br>/n");
       }
        return "查看session成功";
   }
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-09-27 07:30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java学习网 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档