zoukankan      html  css  js  c++  java
  • shiro框架中获取username、ip等信息

      private String getUsername() {
            Object principal = SecurityUtils.getSubject().getPrincipal();
            return principal.toString();
        }
    
        private String getIp(){
            Subject subject = SecurityUtils.getSubject();
            String host = subject.getSession().getHost();
            return host;
        }

    通过这两个方法,可以预见,基本上所有的信息都可以在SecurityUtils.getSubject()中获取到;

    以下是从别的文章中看到的:

    当获取用户名的时候,是自己登录时放入session的吧,正确是SecurityUtils.getSubject().getPrincipal();就是你的realms内doGetAuthenticationInfo时new SimpleAuthenticationInfo的第一个构造参数,直接放user对象就行了

    以下为转载的文章:关于shiro中的session

    在安全框领域,Apache Shiro 提供了一个独一无二的东西:一个完整的企业级Session 解决方案,从最简单的命令行及智能手机应用到最大的集群企业Web 应用程序。
    如果你需要session 支持,你可以使用Shiro的Session支持,比Web 容器或使用EJB 有状态会话Bean这两种机制的使用和管理更为简单。 下面是Shiro对Session支持的一些特点:
    1) POJO/J2SE based(IoC friendly) - Shiro 的一切(包括所有Session 和Session Management 方面)都是基于接口和POJO 实现这可以让你轻松地配置
      所有拥有任何JavaBeans 兼容配置格式(如JSON,YAML,Spring XML 或类似的机制)的会话组件。你也可以轻松地扩展Shiro的组件或编写你自己所需的来完全
      自定义sessionmanagement。
    2) Easy Custom Session Storage - 因为Shiro 的Session 对象是基于POJO 的,会话数据可以很容易地存储在任意数量的数据源。这允许你自定义你的应用程
      序会话数据的确切位置——例如,文件系统,联网的分布式缓存,关系数据库,或专有的数据存储。
    3) Container-Independent Clustering! - Shiro 的会话可以很容易地聚集通过使用任何随手可用的网络缓存产品,像Ehcache + Terracotta,Coherence,
      GigaSpaces,等等。这意味着你可以为Shiro 配置会话群集一次且仅一次,无论你部署到什么容器中,你的会话将以相同的方式聚集。不需要容器的具体配置!
    4) Heterogeneous Client Access - 与EJB 或web 会话不同,Shiro 会话可以被各种客户端技术“共享”。例如,一个桌面应用程序可以“看到”和“共享”同一个被
      使用的物理会话通过在Web 应用程序中的同一用户。我们不知道除了Shiro 以外的其他框架能够支持这一点。
    5) Event Listeners - 事件监听器允许你在会话生命周期监听生命周期事件。你可以侦听这些事件和对自定义应用程序的行为作出反应——例如,更新用户记录当他们的
      会话过期时。
    6) Host Address Retention - Shiro Sessions 从会话发起地方保留IP 地址或主机名。这允许你确定用户所在,并作出相应的反应(通常是在IP 分配确定的企业
      内部网络环境)。
    7) Inactivity/Expiration Support - 由于不活动导致会话过期,如果你希望的话,它们可以通过touch()方法来保持它们“活着”。这在RIA(富互联网应用)环境非 
      常有用,用户可能会使用桌面应用程序,但可能不会经常与服务器进行通信,但该服务器的会话不应过期。
    8) Transparent Web Use - Shiro 的网络支持,充分地实现和支持关于Sessions(HttpSession 接口和它的所有相关的API)的Servlet2.5 规范.这意味着你可
      以使用在现有Web 应用程序中使用Shiro 会话,并且你不需要改变任何现有的Web 代码。
    9) Can be used for SSO - 由于Shiro 会话是基于POJO 的,它们可以很容易地存储在任何数据源,而且它们可以跨程序“共享”。我们称之为"poor man's SSO"
      并且它可以用来提供简单的登录体验,由于共享的会话能够保留身份验证状态。 在Shiro中使用Session非常简单,可以通过与当前执行的Subject 交互来获取Session。例如: Subject currentUser 
    = SecurityUtils.getSubject(); Session session = currentUser.getSession(); session.setAttribute("someKey", someValue); 对于那些熟悉HttpServletRequest API 的人,Subject.getSession(boolean create)方法与HttpServletRequest.getSession(boolean create)方法有着
      异曲同工之效。 l 如果该Subject 已经拥有一个Session,则boolean 参数被忽略且Session 被立即返回。 l 如果该Subject 还没有一个Session 且create 参数为true,则创建一个新的会话并返回该会话。 l 如果该Subject 还没有一个Session 且create 参数为false,则不会创建新的会话且返回null。 l 当你获取了一个Subject 的Session 后,你可以用它来做许多事情,像设置或取得attribute,设置其超时时间,等等。 ———————————————— 版权声明:本文为CSDN博主「peterwanghao」的原创文章,遵循 CC
    4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/peterwanghao/article/details/8191115
  • 相关阅读:
    jQuery的平滑页面内锚定链接插件:$.smoothAnchor()
    分享10个超酷的jQuery动画教程
    jQuery技术在线小测试
    分享一个jQuery的小测验(Quiz)插件:jQuizzy
    (SqlServer)不公开存储过程sp_Msforeachtable与sp_Msforeachdb详解
    SQL Server实用操作小技巧集合
    如何加密和解密文件
    winform程序最小化到托盘后没法关机的解决方案
    SQL语句操作大全
    自定义事件
  • 原文地址:https://www.cnblogs.com/notchangeworld/p/12191696.html
Copyright © 2011-2022 走看看