SpringBoot+Shiro权限管理

pringBoot与Shiro的集成是实现权限管理的一种有效方式。以下是对SpringBoot+Shiro权限管理的详细介绍:

一、Shiro简介

Shiro是一款主流的Java安全框架,不依赖任何容器,可以运行在Java SE和Java EE项目中。它的主要作用是对访问系统的用户进行身份认证、授权、会话管理、加密等操作。Shiro基于session进行身份认证和访问控制,包括以下几个核心组件:

  1. Subject:主体,代表了当前用户,可以是任何第三方系统帐号。每个Subject实例都会绑定到SecurityManager上。
  2. SecurityManager:安全管理器,管理所有Subject,可以配合内部安全组件。它是Shiro的核心,主要协调Shiro内部的各种安全组件。
  3. Realms:域,用于进行权限信息的验证,一般需要自己实现,是用户数据和Shiro数据交互的桥梁。
  4. Authentication:身份认证/登录(账号密码验证)。
  5. Authorization:授权,即角色或者权限验证。
  6. Session Manager:会话管理,用户登录后的session相关管理。
  7. Cryptography:加密,密码加密等。

此外,Shiro还提供了Web支持、缓存功能、记住我、多线程并发验证等特性。

动态菜单

        动态菜单:系统里面有很多菜单可以进行点击操作,但是不同的角色用户能够操作的菜单肯定是不会相同的,那么,就需要用角色来区分用户,进而区分用户所能看到/操作的菜单。

准备测试数据

        还是使用之前的两个用户,hlliu和t114,hlliu设置为角色1(管理员),t114设置为角色2(客户经理),管理员至少拥有“权限管理”权限,客户管理拥有“营销管理”,“客户管理”等权限

获取动态菜单

        用户登录成功之后,需要获取到用户相应的动态菜单数据,此功能代码前面章节已经实现,在IndexController类的login方法中,具体代码如下:

// 认证(登录)成功
User user = (User) subject.getPrincipal();
// 获取权限
Role role = user.getRole(); // 如果一对多关联不是立即加载,则需要通过用户获取
List<Right> rights = roleService.findRightsByRole(role);
role.getRights().addAll(rights);
session.setAttribute("loginUser", user);

显示动态菜单

 <li class="active">
             <a>
                  <i class="fa fa-home"></i> <span>权限管理</span>
                  <span class="fa fa-chevron-down"></span>
              </a>
              <ul class="nav child_menu" style="display: block;">
                  <li class="current-page">
                     <a th:href="@{/user/list}" href="/crm/user/list">用户管理                                                
               </a>
                  </li>
                  <li>
                      <a href="/role/list">角色管理</a>
                  </li>
              </ul>
           </li>

角色管理

        前面我们实现了用户管理,接下来我们实现角色管理,角色管理和用户管理实现的功能差不读,最大的区别在于新增或修改角色时,需要指定角色拥有的权限,这也是角色管理中的一处冲难点。

Model模型开发

1、entity包括Role.java和Right.java,且两个对象是多对多关系,前面已经实现。

2、Repository包括 RoleRepository.Java 和 RightRepository.Java,前面已经实现,且在RoleRepository.java中添加根据角色名称进行模糊查询并分页的方法:

Page<Role> rolePage(String roleName, Page<Role> rolePager);

 3.service包括RoleService,添加对Role对象的增删查方法:

三、注意事项

  1. 密码加密:在存储用户密码时,应该使用加密方式存储。Shiro提供了多种密码加密方式,如MD5、SHA-256等。可以在自定义Realm的doGetAuthenticationInfo方法中使用HashedCredentialsMatcher来设置密码加密方式。
  2. 会话管理:Shiro提供了会话管理功能,可以管理用户的会话信息。在配置Shiro时,可以设置会话的超时时间、会话存储方式等。
  3. 异常处理:在处理Shiro相关的异常时,应该进行友好的异常处理,并给出相应的提示信息。可以使用Spring Boot的全局异常处理机制来处理Shiro的异常。

通过以上步骤,可以在Spring Boot项目中成功集成Shiro权限管理框架,并实现用户身份验证、角色管理和权限控制等功能。

上一篇:【Hive sql 面试题】统计每个成绩段人数(数据格式为 json),两种导入数据格式 + 两种解决方案-表数据如下:


下一篇:免费无广,这5款才是真正的Windows必装软件,一个比一个好用