shiro学习_Subject的使用

    Shiro为我们暴露的认证授权组件Subject,为我们提供了当前用户、角色和授权的相关信息,并且允许我们在实际项目中通过以下三种方式进行调用(当然最终的认证授权部分的还是Subject通过SecurityManager调用具体实现的realm进行判定):

1、编程式授权(当然在实际的生产环境中很少使用)

    1) 直接通过角色的访问控制(即调用数据库查看当前subject对应的用户是否具有某一角色即可,只是shiro在该部分有并发控制)

    2) 基于角色的访问控制


2、注解式授权

    @RequiresAuthentication

        要求当前Subject已经在session中验证通过(验证当前用户是否登录:subject.isAuthenticated() 结果为true)

    @RequiresUser

        验证用户是否被记忆,user有两种含义:

            1) 一种是成功登录的(subject.isAuthenticated() 结果为true);

            2) 另外一种是被记忆的(subject.isRemembered()结果为true)。

    @RequiresGuest

        用户没有登录认证或被记住过,验证是否是一个guest的请求,与@RequiresUser完全相反。换言之,RequiresUser  == !RequiresGuest。此时subject.getPrincipal() 结果为null.

@RequiresPermissions

验证用户是否具有一个或多个权限,该注解将会经常在项目中使用,如果不满足条件则抛出AuthorizationException异常

1) 是否具有某一权限@RequiresPermission("account:create")

        2) 是否具有多个权限@RequiresPermission({"account:create","account:update"})

@RequiresRoles

验证当前用户是否具有某角色,与验证权限类似

3、Jsp标签授权

    首先需要导入标签库  <%@taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>

    guest

        guest标签(与@RequiresGuest对应)

<shiro:guest>  
    欢迎游客访问,<a href="${pageContext.request.contextPath}/login.jsp">登录</a>  
</shiro:guest>

    user

        user标签(与@RequiresUser对应)

    authenticated

        authenticated标签,用户登录(不包括记住我功能登录)

    notAuthenticated

        notAuthenticated标签,用户未登录(记住我功能也算未登录)

    principal

        principal标签  显示用户身份信息,默认调用Subject.getPrincipal()获取,即Primary Principal

        <shiro:principal type="java.lang.String"/>	相当于Subject.getPrincipals().oneByType(String.class)
	<shiro:principal property="username"/>          相当于((User)Subject.getPrincipals()).getUsername()

    hasRole

        hasRole标签 (与@RequiresRoles对应)

<shiro:hasRole name="update">  
    <a href="..............">修改</a>
</shiro:hasRole> 

    lacksRole

        lacksRole标签 当前用户没有任何角色则显示标签体中的内容

    hasAnyRoles

        hasAnyRoles标签  当前用户拥有任何一个角色则显示标签体中的内容

    hasAllRoles

       hasAllRoles标签 当前用户拥有指定的所有角色则显示标签体中的内容

    hasPermission

        hasPermission标签 (与@RequiresPermissions对应)

    lacksPermission

        lacksPermission标签 当前用户拥有任何一个权限则显示标签体中的内容

    hasAnyPermissions

        hasAnyPermissions标签 当前用户拥有任何一个权限则显示标签体中的内容

hasAllPermissions

        hasAllPermissions标签 当前用户拥有指定的所有权限则显示标签体中的内容,一个或多个角色和权限的在项目中会经常使用,例如:

<zhang:hasAllRoles name="admin,user">  
    用户[<shiro:principal/>]拥有角色admin和user<br/>  
</zhang:hasAllRoles>  
<zhang:hasAllPermissions name="user:create,user:update">  
    用户[<shiro:principal/>]拥有权限user:create和user:update<br/>  
</zhang:hasAllPermissions>  
<zhang:hasAnyPermissions name="user:create,abc:update">  
    用户[<shiro:principal/>]拥有权限user:create或abc:update<br/>  
</zhang:hasAnyPermissions>












  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
学习Shiro框架可以按照以下步骤进行: 1. 了解基础概念:首先,你需要了解Shiro的基本概念和术语,例如主体(Subject)、认证(Authentication)、授权(Authorization)、Realm等。可以阅读Shiro的官方文档或者相关的教程来获得这些知识。 2. 安装和配置:安装Shiro框架并进行基本的配置。你可以在Shiro的官方网站上找到安装指南和配置示例。 3. 认证功能:学习如何使用Shiro进行用户认证,包括用户名密码认证、Remember Me功能、多Realm认证等。可以尝试编写简单的认证示例来理解这些功能。 4. 授权功能:学习如何使用Shiro进行用户授权,包括角色授权和权限授权。了解如何定义角色和权限,并且如何在代码中进行授权判断。 5. Session管理:了解Shiro如何管理用户的会话信息,包括会话超时、会话验证等。学习如何使用Shiro提供的Session API来管理会话。 6. 整合框架:如果你使用其他的Java框架,例如Spring或者Spring Boot,学习如何将Shiro与这些框架进行整合,以便更好地利用Shiro的功能。 7. 安全性优化:深入了解Shiro的安全性能优化技巧,例如密码加密、安全配置、防止常见安全漏洞等。 8. 实战练习:通过编写实际的应用程序来巩固所学的知识。可以尝试开发一个简单的Web应用程序,使用Shiro进行用户认证和授权。 除了官方文档和教程,还可以参考一些优秀的书籍或在线教程,例如《Apache Shiro官方指南》、《深入浅出Shiro安全框架》等。此外,加入Shiro的社区或者论坛,与其他开发者交流经验也是一个很好的学习方式。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值