Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Shiro框架03授权--登录授权以及是否放行

Shiro框架03授权--登录授权以及是否放行

作者头像
天蝎座的程序媛
发布于 2022-11-18 13:27:53
发布于 2022-11-18 13:27:53
1.2K00
代码可运行
举报
运行总次数:0
代码可运行

目录

1.添加角色和权限的授权方法

2.自定义Realm配置Shiro授权认证

3.使用Shiro标签实现权限验证

3.1 导入Shiro标签库

3.2 Shiro标签库

4.配置注解权限验证

4.1 Shiro注解

4.2 开启注解

4.3 注解权限验证失败不跳转路径问题


1.添加角色和权限的授权方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//根据username查询该用户的所有角色,用于角色验证
  Set<String> findRoles(String username);

  //根据username查询他所拥有的权限信息,用于权限判断
  Set<String> findPermissions(String username);

2.自定义Realm配置Shiro授权认证

  1) 获取验证身份(用户名)   2) 根据身份(用户名)获取角色和权限信息   3) 将角色和权限信息设置到SimpleAuthorizationInfo   SimpleAuthorizationInfo info=new SimpleAuthorizationInfo();   info.setRoles(roles);   info.setStringPermissions(permissions);

3.使用Shiro标签实现权限验证

3.1 导入Shiro标签库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<%@taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>

3.2 Shiro标签库

  guest标签 :验证当前用户是否为“访客”,即未认证(包含未记住)的用户   user标签 :认证通过或已记住的用户   authenticated标签 :已认证通过的用户。不包含已记住的用户,这是与user标签的区别所在   notAuthenticated标签 :未认证通过用户,与authenticated标签相对应。与guest标签的区别是,该标签包含已记住用户   principal 标签 :输出当前用户信息,通常为登录帐号信息    hasRole标签 :验证当前用户是否属于该角色    lacksRole标签 :与hasRole标签逻辑相反,当用户不属于该角色时验证通过   hasAnyRole标签 :验证当前用户是否属于以下任意一个角色   hasPermission标签 :验证当前用户是否拥有指定权限   lacksPermission标签 :与hasPermission标签逻辑相反,当前用户没有制定权限时,验证通过 

4.配置注解权限验证

4.1 Shiro注解

 @RequiresAuthenthentication:表示当前Subject已经通过login进行身份验证;即 Subjecj.isAuthenticated()返回 true   @RequiresUser:表示当前Subject已经身份验证或者通过记住我登录的   @RequiresGuest:表示当前Subject没有身份验证或者通过记住我登录过,即是游客身份   @RequiresRoles(value = {"admin","user"},logical = Logical.AND):表示当前Subject需要角色admin和user   @RequiresPermissions(value = {"user:delete","user:b"},logical = Logical.OR):表示当前Subject需要权限user:delete或者user:b

4.2 开启注解

注: 必须将Shiro注解的开启放置到spring-mvc.xml中(即放在springMVC容器中加载),不然Shiro注解开启无效!!!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--配置自定义的Realm-->
    <bean id="shiroRealm" class="com.zking.ssm.book.shiro.ShiroRealm">
        <property name="sysUserService" ref="sysUserServiceImpl" />
        <!--注意:重要的事情说三次~~~~~~此处加密方式要与用户注册时的算法一致 -->
        <!--注意:重要的事情说三次~~~~~~此处加密方式要与用户注册时的算法一致 -->
        <!--注意:重要的事情说三次~~~~~~此处加密方式要与用户注册时的算法一致 -->
        <!--以下三个配置告诉shiro将如何对用户传来的明文密码进行加密-->
        <property name="credentialsMatcher">
            <bean id="credentialsMatcher" class="org.apache.shiro.authc.credential.HashedCredentialsMatcher">
                <!--指定hash算法为MD5-->
                <property name="hashAlgorithmName" value="md5"/>
                <!--指定散列次数为1024-->
                <property name="hashIterations" value="1024"/>
                <!--true指定Hash散列值使用Hex加密存. false表明hash散列值用用Base64-encoded存储-->
                <property name="storedCredentialsHexEncoded" value="true"/>
            </bean>
        </property>
    </bean>

    <!--注册安全管理器-->
    <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
        <property name="realm" ref="shiroRealm" />
    </bean>

    <!--Shiro核心过滤器-->
    <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
        <!-- Shiro的核心安全接口,这个属性是必须的 -->
        <property name="securityManager" ref="securityManager" />
        <!-- 身份验证失败,跳转到登录页面 -->
        <property name="loginUrl" value="/home/index.shtml"/>
        <!-- 身份验证成功,跳转到指定页面 -->
        <!--<property name="successUrl" value="/index.jsp"/>-->
        <!-- 权限验证失败,跳转到指定页面 -->
        <!--<property name="unauthorizedUrl" value="/user/noauthorizeUrl"/>-->
        <!-- Shiro连接约束配置,即过滤链的定义 -->
        <property name="filterChainDefinitions">
            <value>
                <!--
                注:anon,authcBasic,auchc,user是认证过滤器
                    perms,roles,ssl,rest,port是授权过滤器
                -->
                <!--anon 表示匿名访问,不需要认证以及授权-->
                <!--authc表示需要认证 没有进行身份认证是不能进行访问的-->
                <!--roles[admin]表示角色认证,必须是拥有admin角色的用户才行-->
                /user/login=anon
                /book/**=authc
               <!-- /css/**               = anon
                /images/**            = anon
                /js/**                = anon
                /                     = anon
                /user/logout          = logout
                /user/**              = anon
                /userInfo/**          = authc
                /dict/**              = authc
                /console/**           = roles[admin]
                /**                   = anon-->
            </value>
        </property>
    </bean>

    <!-- Shiro生命周期,保证实现了Shiro内部lifecycle函数的bean执行 -->
    <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/>
</beans>

4.3 注解权限验证失败不跳转路径问题

问题原因:由于我们架构是用springmvc框架来搭建的所以项目的路径跳转是由springmvc 来控制的,也就是说我们在shiro里面的配置没有用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!-- 身份验证成功,跳转到指定页面 -->
  <property name="successUrl" value="/index.jsp"/>                //没有用,达不到预期效果
  <!-- 权限验证失败,跳转到指定页面 -->
  <property name="unauthorizedUrl" value="/user/noauthorizeUrl"/> //没有用,达不到预期效果

解决方案: springmvc中有一个org.springframework.web.servlet.handler.SimpleMappingExceptionResolver类就可以解决这个问题

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
    <property name="exceptionMappings">
        <props>
            <prop key="org.apache.shiro.authz.UnauthorizedException">
                unauthorized
            </prop>
        </props>
    </property>
  </bean>

以上就是有关于授权的分享,后期还会分享一篇会话管理,然后把学习Shiro这个篇章的项目发布出来,有兴趣的可以看看

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-11-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
shiro中的验证用户身份认证以及授权
  7.1 生成加密密码PasswordHelper类(盐加密)    MD5+散列1024+Hex/Base64
用户10196776
2022/11/22
1.2K0
shiro中的验证用户身份认证以及授权
十分钟带你轻松入门Shiro
Shiro通过在web.xml配置文件中配置的ShiroFilter来拦截所有请求,并通过配置filterChainDefinitions来指定哪些页面受保护以及它们的权限。
wangweijun
2022/01/10
4670
十分钟带你轻松入门Shiro
shiro框架的基本理解[通俗易懂]
Subject:主体,代表了当前“用户”,这个用户不一定是一个具体的人,与当前应用交互的任何东西都是Subject,如网络爬虫,机器人等;即一个抽象概念;所有Subject都绑定到SecurityManager,与Subject的所有交互都会委托给SecurityManager;可以把Subject认为是一个门面;SecurityManager才是实际的执行者;
全栈程序员站长
2022/10/03
5120
shiro框架是什么_中国历史知识框架
2.Shiro权限框架 2.1 概念 2.2 Apache Shiro 与Spring Security区别
全栈程序员站长
2022/10/05
5380
shiro框架是什么_中国历史知识框架
这可能是最全的Shiro入门(整合SSM)
基本上涉及到用户参与的系统都要进行权限管理,权限管理属于系统安全的范畴,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源。
上分如喝水
2022/04/13
2.2K0
这可能是最全的Shiro入门(整合SSM)
ssm整合shiro详解
这里有详细的ssm整合shiro步骤,需要先搭建ssm框架,教程在 https://blog.csdn.net/qq_41150890/article/details/108419455
全栈程序员站长
2022/06/27
3470
ssm整合shiro详解
安全框架shiro和springSecurity的比较
首先Shiro较之 Spring Security,Shiro在保持强大功能的同时,还在简单性和灵活性方面拥有巨大优势。
软件小生活
2022/03/29
8170
安全框架shiro和springSecurity的比较
shiro权限管理框架与springmvc整合
shiro是apache下的一个项目,和spring security类似,用于用户权限的管理‘
肖哥哥
2019/02/22
5690
shiro权限管理框架与springmvc整合
浅谈Apache Shiro权限模块及数据库设计
写在最最最~~~前面的:由于Shiro框架在学习过程中假如没有一个实例Demo的参考,理解起来可能较为生涩难懂,所以笔者建议大家参考这个开源的项目:点我下载项目,该项目是我在学习Apache Shiro过程中参考的项目,我在原项目的基础上增加了一些便于理解的注释等,项目采用前后分离的方式开发,原作者:点我查看
关忆北.
2020/10/15
1.4K0
安全框架Shiro和SpringSecurity的比较
首先Shiro较之 Spring Security,Shiro在保持强大功能的同时,还在简单性和灵活性方面拥有巨大优势。
Java编程指南
2020/05/13
8510
Shiro的原理及Web搭建
Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码学和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。
Java团长
2018/10/18
8270
Shiro的原理及Web搭建
Shiro安全框架入门篇(登录验证实例详解)
Apache Shiro是Java的一个安全框架,旨在简化身份验证和授权。Shiro在JavaSE和JavaEE项目中都可以使用。它主要用来处理身份认证,授权,企业会话管理和加密等。Shiro的具体功能点如下:
Java团长
2018/08/03
8210
从权限控制到shiro框架的应用
说明:本文很多观点和内容来自互联网以及各种资料,如果侵犯了您的权益,请及时联系我,我会删除相关内容。 权限管理 基本上涉及到用户参与的系统都要进行权限管理,权限管理属于系统安全的范畴,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源。 权限管理包括用户身份认证和授权两部分,简称认证授权。对于需要访问控制的资源用户首先经过身份认证,认证通过后用户具有该资源的访问权限方可访问。 用户身份认证 身份认证,就是判断一个用户是否为合法用户的处理过程。最常用的简
神秘的寇先森
2018/05/30
2.3K0
基于权限安全框架Shiro的登录验证功能实现
目前在企业级项目里做权限安全方面喜欢使用Apache开源的Shiro框架或者Spring框架的子框架Spring Security。
SmileNicky
2019/01/17
8400
Shiro框架02权限认证+MD5加盐加密+散列1024+Hex/Base64(源码)
                           用户与角色                                              角色与权限
天蝎座的程序媛
2022/11/18
6630
Shiro框架02权限认证+MD5加盐加密+散列1024+Hex/Base64(源码)
shiro+SSM
当前的操作用户 可以是人 爬虫 当前跟软件交互的东西 在shiro当中我们可以统称"用户" 在代码的任何地方,你都能轻易的获得Shiro Subject。 一旦获得Subject,你就可以立即获得你希望用Shiro为当前用户做的90%的事情:登录、退、访问会话、执行授权检查等
JokerDJ
2023/11/27
2360
shiro+SSM
Apache Shiro 使用手册 原
一、什么是Shiro Apache Shiro是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理等功能: 
wuweixiang
2018/08/14
9590
Springboot+shiro基于url身份认证和授权认证
三个核心组件:Subject, SecurityManager 和 Realms.
bigsai
2019/09/24
1.6K0
Springboot+shiro基于url身份认证和授权认证
Shiro
Apache Shiro是Java的一个安全框架。它为开发人员提供一个直观而全面的认证,授权,加密及会话管理的解决方案。 Apache Shiro相当简单,对比Spring Security,可能没有Spring Security做的功能强大,但是在实际工作时可能并不需要那么复杂的东西,能更简单的解决项目问题就好了。Shiro不仅可以用在JavaSE环境,也可以用在JavaEE环境帮助我们完成:认证、授权、加密、会话管理、与Web集成、缓存等。而且Shiro的API也是非常简单。
宋先生
2019/07/18
9000
Shiro
从零开始做网站6-springboot集成shiro+vue实现登录和权限控制
到上一篇已经把前后端的项目底子搭好了,今天开始做功能,首先就是后台管理系统登录功能。
sunonzj
2022/06/21
1.2K0
从零开始做网站6-springboot集成shiro+vue实现登录和权限控制
推荐阅读
相关推荐
shiro中的验证用户身份认证以及授权
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验