Shiro-14-subject 主体

这篇具有很好参考价值的文章主要介绍了Shiro-14-subject 主体。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

理解Apache Shiro中的主题

毫无疑问,Apache Shiro中最重要的概念是主题。

“主题”只是一个安全术语,它指的是应用程序用户特定于安全的“视图”。Shiro主题实例代表了单个应用程序用户的安全状态和操作。

这些操作包括:

  • 身份验证(登录)

  • 授权(访问控制)

  • 会话的访问

  • 注销

我们最初想叫它“用户”,因为这“很有意义”,但我们决定不叫它:太多的应用程序已经有了它们自己的用户类/框架的api,我们不想与它们冲突。

此外,在安全领域,术语“主体”实际上是公认的命名法。

Shiro的API鼓励应用程序采用以主题为中心的编程范式。

在编写应用程序逻辑时,大多数应用程序开发人员都想知道当前执行的用户是谁。

虽然应用程序通常可以通过自己的机制(UserService,等等)查找任何用户,但当涉及到安全性时,最重要的问题是“当前用户是谁?”

虽然任何主题都可以通过使用SecurityManager获得,但仅基于当前用户/主题的应用程序代码更加自然和直观

当前正在执行的主体

在几乎所有的环境中,你都可以通过使用 org.apache.shiro.SecurityUtils 来获取当前正在执行的主题:

Subject currentUser = SecurityUtils.getSubject();

在独立的应用程序中,getSubject()调用可能会根据应用程序特定位置的用户数据返回一个主题,而在服务器环境(例如web应用程序)中,它会根据与当前线程或传入请求相关联的用户数据获取主题。

在你学习了现在的课程之后,你能做些什么呢?

如果你想让用户在他们当前的会话中使用这些东西,你可以得到他们的会话:

Session session = currentUser.getSession();
session.setAttribute( "someKey", "aValue" );

Session是一个特定于shiro的实例,它提供了常规httpsession所使用的大部分功能,但也有一些额外的好处和一个很大的区别:它不需要HTTP环境!

如果在web应用程序中部署,默认情况下会话将是基于HttpSession的。但是,

在一个非web环境中,比如这个简单的快速入门,Shiro默认情况下会自动使用它的企业会话管理。这意味着无论部署环境如何,您都可以在应用程序的任何层中使用相同的API。这打开了一个全新的应用程序世界,因为任何需要会话的应用程序都不需要强制使用HttpSession或EJB有状态会话bean。而且,任何客户机技术现在都可以共享会话数据。

所以现在你可以获得一个对象和他们的会话。那么真正有用的东西呢,比如检查它们是否被允许做一些事情,比如检查角色和权限?

登陆验证

我们只能对已知的用户做这些检查。上面的Subject实例表示当前用户,但是谁是当前用户呢?嗯,他们是匿名的——也就是说,直到他们至少登录一次。

那么,让我们这样做:

if ( !currentUser.isAuthenticated() ) {
    //collect user principals and credentials in a gui specific manner
    //such as username/password html form, X509 certificate, OpenID, etc.
    //We'll use the username/password example here since it is the most common.
    //(do you know what movie this is from? ;)
    UsernamePasswordToken token = new UsernamePasswordToken("lonestarr", "vespa");
    //this is all you have to do to support 'remember me' (no config - built in!):
    token.setRememberMe(true);
    currentUser.login(token);
}

就是这样!再简单不过了。

但是,如果他们的登录尝试失败怎么办?你可以捕捉各种特定的异常,告诉你到底发生了什么:

try {
    currentUser.login( token );
    //if no exception, that's it, we're done!
} catch ( UnknownAccountException uae ) {
    //username wasn't in the system, show them an error message?
} catch ( IncorrectCredentialsException ice ) {
    //password didn't match, try again?
} catch ( LockedAccountException lae ) {
    //account for that username is locked - can't login.  Show them a message?
}
    ... more types exceptions to check if you want ...
} catch ( AuthenticationException ae ) {
    //unexpected condition - error?
}

作为应用程序/GUI开发人员,您可以选择是否根据异常显示最终用户消息(例如,“系统中没有具有该用户名的帐户”)。

有许多不同类型的异常你可以检查,或者抛出你自己的Shiro可能无法解释的自定义条件。

更多信息请参阅AuthenticationException JavaDoc。

现在,我们有了一个登录用户。

权限校验

我们还能做什么?

让我们说说他们是谁:

//print their identifying principal (in this case, a username): 
log.info( "User [" + currentUser.getPrincipal() + "] logged in successfully." );

我们也可以测试他们是否有特定的角色:

if ( currentUser.hasRole( "schwartz" ) ) {
    log.info("May the Schwartz be with you!" );
} else {
    log.info( "Hello, mere mortal." );
}

是否拥有权限:

if ( currentUser.isPermitted( "lightsaber:weild" ) ) {
    log.info("You may use a lightsaber ring.  Use it wisely.");
} else {
    log.info("Sorry, lightsaber rings are for schwartz masters only.");
}

此外,我们还可以执行非常强大的实例级权限检查——查看用户是否有能力访问特定类型的实例的能力:

if ( currentUser.isPermitted( "winnebago:drive:eagle5" ) ) {
    log.info("You are permitted to 'drive' the 'winnebago' with license plate (id) 'eagle5'.  " +
                "Here are the keys - have fun!");
} else {
    log.info("Sorry, you aren't allowed to drive the 'eagle5' winnebago!");
}

最后,登陆的用户也可以登出:

currentUser.logout(); //removes all identifying information and invalidates their session too.

Shiro-14-subject 主体,安全,缓存,安全,java,shiro,spring文章来源地址https://www.toymoban.com/news/detail-836844.html

到了这里,关于Shiro-14-subject 主体的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JAVA安全框架之shiro

    Apache Shiro 是一个功能强大且易于使用的 Java 安全(权限)框架 。Shiro 可以完 成: 认证、授权、加密、会话管理、与 Web 集成、缓存 等。借助 Shiro 您可以快速轻松 地保护任何应用程序——从最小的移动应用程序到最大的 Web 和企业应用程序。 官网 :https://shiro.apache.org/     s

    2024年02月15日
    浏览(50)
  • Spring Boot进阶(84):Spring Boot集成Shiro:安全、简单、快捷 | 超级详细,建议收藏

            随着互联网的快速发展,越来越多的应用程序需要进行用户身份验证和权限控制,保障系统的安全性和稳定性,以此而来Shiro。Shiro是一个易于使用的Java安全框架,其提供了身份验证、授权、加密、会话管理等功能,可以轻松地与Spring框架集成,是企业级应用程序

    2024年02月04日
    浏览(39)
  • [Java安全]—Shiro回显内存马注入

    文章首发于先知社区:Shiro回显内存马注入 接上篇[Java安全]—Tomcat反序列化注入回显内存马_,在上篇提到师傅们找到了一种Tomcat注入回显内存马的方法, 但他其实有个不足之处:由于shiro中自定义了一个filter,因此无法在shiro中注入内存马。 所以在后边师傅们又找到了一个

    2024年02月06日
    浏览(37)
  • 【java安全】无Commons-Collections的Shiro550反序列化利用

    Shiro550利用的难点 前面我们学习Shiro反序列化漏洞时,使用了一个简单的shiroDemo,在这个Demo中引入了一些依赖: shiro-core、shiro-web,这是shiro本身的依赖 javax.servlet-api、jsp-api,这是JSP和Servlet的依赖,仅在编译阶段使用,因为Tomcat中自带这 两个依赖 slf4j-api、slf4j-simple,这是为

    2024年02月13日
    浏览(33)
  • Shiro框架:Shiro SecurityManager安全管理器解析

    目录 1. SecurityManager介绍 1.1 Authenticator 1.2 Authorizer 1.3 SessionManager 2. DefaultWebSecurityManager解析 2.1 Destroyable 2.2 CacheManagerAware 2.3 EventBusAware 2.4 CachingSecurityManager(聚合缓存管理和事件监听管理功能) 2.5 RealmSecurityManager(聚合Realm管理功能) 2.6 AuthenticatingSecurityManager(聚合登

    2024年01月17日
    浏览(49)
  • Shiro安全(三):Shiro自身利用链之CommonsBeanutils

    前面在利用shiro反序列化时,都是利用CC链,但是这需要服务端引入CommonsCollections组件。所以最好是找到一条shiro自身的利用链,而不需要任何的前提条件 在之前曾介绍过 java.util.PriorityQueue ,在反序列化这个对象时,为了保证队列顺序,会进行重排序的操作,而排序就涉 及到

    2024年02月07日
    浏览(32)
  • SSM+Shiro安全框架整合(完成安全认证--登录+权限授权)+ssm整合shiro前后端分离

    目录 1.搭建SSM框架  1.1.引入相关的依赖 1.2. spring配置文件 1.3. web.xml配置文件 1.4.配置Tomcat并启动 2.ssm整合shiro---认证功能  (1).引入依赖 (2).修改spring配置文件 (3).修改web.xml文件 (4).新建login.jsp(登录页面) (5).新建success.jsp(登录成功后跳转到此) (6).创建User实体类 (7).创建LoginVo

    2024年02月15日
    浏览(44)
  • Spring Boot 整合 Shiro(后端)

    1 Shiro 什么是 Shiro 官网: http://shiro.apache.org/ 是一款主流的 Java 安全框架,不依赖任何容器,可以运行在 Java SE 和 Java EE 项目中,它的主要作用是对访问系统的用户进行身份认证、 授权、会话管理、加密等操作。 Shiro 就是用来解决安全管理的系统化框架。 2 Shiro 核心组件 用

    2024年02月09日
    浏览(49)
  • shiro 整合 spring 实战及源码详解

    前面我们学习了如下内容: 5 分钟入门 shiro 安全框架实战笔记 shiro 整合 spring 实战及源码详解 相信大家对于 shiro 已经有了最基本的认识,这一节我们一起来学习写如何将 shiro 与 spring 进行整合。 定义一个简单的服务类,用于演示 @RequiresPermissions 注解的权限校验。 我们对原

    2024年02月22日
    浏览(37)
  • Shiro安全框架简介

    1.1 什么是权限管理 基本上只要涉及到用户参数的系统都要进行权限管理,使用权限管理实现了对用户访问系统的控制,不同的用户访问不同的资源。按照安全规则或者安全策略控制用户访问资源,而且只能访问被授权的资源 权限管理包括认证和授权两部分,当用户访问资源

    2023年04月20日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包