SpringBoot后台管理系统框架

article/2025/10/1 10:42:49

SpringBoot后台管理系统框架

SpringBoot后台管理系统功能介绍

登录 注册 用户列表和添加功能

只是个框架 实现了shiro权限控制, 详细的shiro使用

一个模板项目系统 只有少量功能

使用技术

  • SpringBoot框架

  • Mysql数据库

  • redis

  • shiro权限

  • thymeleaf(前端)

功能展示

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

shiro权限

package com.game.app.shiro;import com.game.app.model.system.Permission;
import com.game.app.model.system.Role;
import com.game.app.model.system.User;
import com.game.app.service.system.AuthService;
import com.game.app.service.system.UserService;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.*;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.apache.shiro.subject.Subject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;/*** 自定义权限匹配和账号密码匹配*/
@Service
public class MyShiroRealm extends AuthorizingRealm {private static final Logger logger = LoggerFactory.getLogger(MyShiroRealm.class);@Autowiredprivate AuthService authService;@Autowiredprivate UserService userService;/*** 此方法调用  hasRole,hasPermission的时候才会进行回调.* 权限信息.(授权):* 1、如果用户正常退出,缓存自动清空;* 2、如果用户非正常退出,缓存自动清空;* 3、如果我们修改了用户的权限,而用户不退出系统,修改的权限无法立即生效。* (需要手动编程进行实现;放在service进行调用)* 在权限修改后调用realm中的方法,realm已经由spring管理,所以从spring中获取realm实例,* 调用clearCached方法;* :Authorization 是授权访问控制,用于对用户进行的操作授权,证明该用户是否允许进行当前操作,如访问某个链接,某个资源文件等。*/@Overrideprotected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {/** 当没有使用缓存的时候,不断刷新页面的话,这个代码会不断执行,* 当其实没有必要每次都重新设置权限信息,所以我们需要放到缓存中进行管理;* 当放到缓存中时,这样的话,doGetAuthorizationInfo就只会执行一次了,* 缓存过期之后会再次执行。*/logger.debug("权限配置-->MyShiroRealm.doGetAuthorizationInfo()");// 获取当前登陆用户Subject subject = SecurityUtils.getSubject();User user = (User) subject.getPrincipal();// 添加权限 和 角色信息SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();// 根据用户id查询用户的角色List<Role> roles = authService.selectRoleByUserId(user.getId());if (null != roles && roles.size() > 0) {for (Role role : roles) {//添加角色authorizationInfo.addRole(role.getRoleName());//根据角色查询对应权限数据List<Permission> permissions = authService.selectPermissionByRoleId(role.getId());if (null != permissions && permissions.size() > 0) {// 授权角色下所有权限for (Permission permission : permissions) {authorizationInfo.addStringPermission(permission.getName());}}}}return authorizationInfo;}/*** 认证信息.(身份验证)* Authentication 是用来验证用户身份* 主要是用来进行身份认证的,也就是说验证用户输入的账号和密码是否正确*/@Overrideprotected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken)throws AuthenticationException {logger.debug("用户登录身份认证-->MyShiroRealm.doGetAuthenticationInfo()");//UsernamePasswordToken用于存放提交的登录信息UsernamePasswordToken token = (UsernamePasswordToken)authenticationToken;logger.info("用户登录认证:验证当前Subject时获取到token为:" +ReflectionToStringBuilder.toString(token, ToStringStyle.MULTI_LINE_STYLE));String username = token.getUsername();// 调用数据层 查询用户User user = userService.selectByUsername(username);logger.debug("用户登录认证!用户信息user:" + user);if (user == null) {// 用户不存在return null;} else {// 密码存在//盐值加密: 交给AuthenticatingRealm使用CredentialsMatcher进行密码匹配,如果觉得人家的不好可以自定义实现
//			SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(
//					user, //用户名
//					user.getPassword(), //密码
//					ByteSource.Util.bytes(user.getCredentialsSalt()),//salt=username+salt
//					getName()  //realm name
//			);//明文: 若存在,将此用户存放到登录认证info中,无需自己做密码对比,Shiro会为我们进行密码对比校验
//			SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(
//					user, //用户名
//					user.getPassword(), //密码
//					getName()  //realm name
//			);//普通md5: Shiro会为我们进行密码对比校验// 第一个参数 ,登陆后,需要在session保存数据// 第二个参数,查询到密码(加密规则要和自定义的HashedCredentialsMatcher中的HashAlgorithmName散列算法一致)// 第三个参数 ,realm名字SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(user, //用户DigestUtils.md5Hex(user.getPassword()),getName()  //realm name);return authenticationInfo;}}}

运行

创建数据库, 然后修改数据库连接相关信息。

启动 SpringBoot 类的main方法

访问: http://localhost:8080/manage-demo
账号: admin 密码: 654321


http://chatgpt.dhexx.cn/article/RDM6rbTP.shtml

相关文章

thinkphp 后台管理框架swiftadmin的使用

SwiftAdmin 极速开发框架 这款框架是基于ThinkPHP Layui 完美契合&#xff0c;在开发上采用最精简最高效的做法去完成业务系统的需求&#xff0c;是一款优秀的中后台极速开发解决方案。 可以很卡快的上手开发&#xff0c;而且他的文档也很完善&#xff0c;代码量不是很多&…

layui搭建后台管理框架

简介&#xff1a;layui&#xff08;谐音&#xff1a;类UI) 是一款采用自身模块规范编写的前端 UI 框架&#xff0c;遵循原生 HTML/CSS/JS 的书写与组织形式&#xff0c;门槛极低&#xff0c;拿来即用。其外在极简&#xff0c;却又不失饱满的内在&#xff0c;体积轻盈&#xff0…

后台管理框架搭建

搭建一套通用的后台管理框架对于以后的快速开发时是非常重要的。通常框架需要包含权限验证、日志、及一些基础数据的增删改查功能。 本框架采用Spring MVCMybatisFreemarkerAdminlte前端 组合在一起搭建一个管理系统。 大概的样子如下&#xff1a; 1.权限 角色->应用-&…

flutter 后台管理框架

一直希望有一个简单实用&#xff0c;强大的后台管理框架&#xff0c;能快速定义各个管理页面 只注重业务上面的处理&#xff0c;经过良久的寻找 终于找了一款符合大众的开源flutter 框架 运行 example 中lib目录下的 main 编译环境 flutter3 vscode config文件夹下面配置 业务…

一定要收藏的5个后台管理系统的前端框架

当你开发新项目的时候&#xff0c;如何快速的完成一个项目的搭建&#xff0c;这个时候就需要借助到一些模板了&#xff0c;现在网上各类UI模板都是相当的齐全的&#xff0c;本文就介绍几个靓仔觉得非常不错的前端框架&#xff0c;感兴趣的可以了解一下。 1、vue-element-admin …

14个适合后台管理系统快速开发的前端框架

1、D2admin 开源地址&#xff1a;https://github.com/d2-projects/d2-admin 文档地址&#xff1a;https://d2.pub/zh/doc/d2-admin/ 效果预览&#xff1a;https://d2.pub/d2-admin/preview/#/index 开源协议&#xff1a;MIT License 2、vue-element-admin 开源地址&#x…

QT的信号与槽原理(经典)

QT的信号与槽原理&#xff08;经典) 信号与 槽作为 QT的核心机制在 QT编程中有着广泛的应用&#xff0c;本文介绍了信号与 槽的一些基本概念、元对象工具以及在实际使用过程中应注意的一些问题。 QT是一个跨平台的C GUI应用构架&#xff0c;它提供了丰富的窗口部件集&#xf…

qt之信号与槽的原理

只要问到qt的亮点是什么&#xff0c;不得不说就是信号与槽机制。信号与槽类似观察者模式。 在面向对象的编程中&#xff0c;都会创建很多实例&#xff0c;而每个实例都是独立的&#xff0c;要想每个实例能够协同合作&#xff0c;那么就会需要一种对象间传递消息的机制&#xf…

[Qt]信号和槽机制

信号和槽机制 目录 信号和槽机制 前言&#xff1a; 1.系统自带的信号和槽 代码实现&#xff1a; 如何查找系统自带的信号和槽(如何使用帮助文档) 2.自定义信号和槽 (1)创建Teacher类和Student类 (2)自定义信号&#xff1a; (3)自定义槽函数&#xff1a; (4)自定义信…

Qt信号与槽机制原理及优缺点

信号和插槽用于对象之间的通信。信号和槽机制是Qt的核心特性&#xff0c;可能也是与其他框架提供的特性最大不同的部分。Qt的元对象系统使信号和插槽成为可能。 作为一个C/C程序员来说 回调应该属于深入人心的机制了。其他工具包使用回调来实现这种通信。回调函数是一个指向函…

QT多线程下的信号与槽机制

目录 1、QThread类 2、创建并启动线程 3、多线程信号与槽 4、信号与槽的调用线程&#xff1f; 5、调整信号与槽所在线程的依附关系 6、信号与槽的连接方式 QT 中 QObject 作QT中类的最终父类&#xff0c;具有自定义信号与槽的能力&#xff0c;只要继承自这个类的类&#xf…

QT—信号与槽详解

目录 一、什么是信号与槽 二、信号与槽的添加 1.添加槽方法 2.添加信号 3.发送信号 4.信号与槽连接 三、连接类型 1.一对一 2.一对多 3.多对一 四、信号与槽断开连接 1.断开一个对象的所有信号关联 2.断开指定信号的所有关联 3.断开指定接收者的所有关联 4.断…

Qt的信号与槽

引入 在GUI编程中&#xff0c;组件组件如何实现通信是核心的技术内容。 Qt使用了信号与槽的机制&#xff0c;为此Qt引入了一些关键字slots、signals、emit&#xff0c;这些都是Qt特有的关键字&#xff0c;然后这些关键字会被Qt的moc转换位标准的C语句。 Qt 的部件类中有一些已…

Linux下的QT信号和槽机制(二)

目录 1.基本知识点 2.信号机制 3.槽机制 4.元对象工具 5.信号和槽机制原理 &#xff08;1&#xff09;信号和槽机制 &#xff08;2&#xff09;信号和槽函数的关联 &#xff08;3&#xff09;信号和槽的断开 &#xff08;4&#xff09;信号和槽的优点 &#xff08;5&…

Qt信号与槽原理

Qt信号与槽原理 本文为原创文章&#xff0c;转载请注明出处&#xff0c;或注明转载自“黄邦勇帅(原名&#xff1a;黄勇) 本文出自本人原创著作《Qt5.10 GUI完全参考手册》网盘地址&#xff1a; https://pan.baidu.com/s/1iqagt4SEC8PUYx6t3ku39Q 《C语法详解》网盘地址&#…

Qt 之 信号槽机制及优缺点

1. Qt 信号槽机制 概念&#xff1a; 信号槽是 Qt 框架引以为豪的机制之一。所谓信号槽&#xff0c;实际就是观察者模式。当某个事件发生之后&#xff0c;比如&#xff0c;按钮检测到自己被点击了一下&#xff0c;它就会发出一个信号&#xff08;signal&#xff09;。这种发出是…

【Qt】一篇全面的信号和槽函数机制总结

信号和槽函数机制 文章目录 信号和槽函数机制一、信号和槽机制简介二、【信号】&#xff08;2-1&#xff09;信号的发出&#xff08;2-2&#xff09;信号的处理 三、【槽函数】&#xff08;3-1&#xff09;带有默认参数的信号和槽函数&#xff08;3-2&#xff09;使用QObject::…

Qt: 信号与槽机制

一、信号和槽机制是什么&#xff1f; 1 Qt信号槽机制&#xff1a;是Qt的核心机制&#xff0c;它是Qt定义的一种对象间的通讯机制&#xff0c;且独立于标准C/C语言。 2 信号&#xff08;signals&#xff09;:当某个类对象发生内部改变时&#xff0c;发射“信号”随后与关联的“槽…

Qt 信号和槽的机制(逻辑清晰的来说清楚信号和槽,呕心沥血之作)

Qt 信号和槽的机制 首先说声对不起&#xff0c;上次在PyQt5中写信号与槽&#xff0c;由于时间原因没有写完。有小伙伴留言说&#xff0c;希望把这章补全。所以&#xff0c;这是一篇迟来的文章&#xff0c;再次向大家说声抱歉。 一、桌面程序的结构 Qt的使用场景&#xff0c;…

Qt信号和槽机制emit的使用

1.相关概念&#xff1a; [1].信号&#xff08;Signal&#xff09;就是在特定情况下被发射的事件 [2].槽&#xff08;Slot&#xff09;就是对信号响应的函数。槽就是一个函数 [3].信号与槽之间的关联&#xff1a;是用 QObject::connect() 函数实现的&#xff0c;其基本格式是…