springboot+springsecurity+jwt+elementui图书管理系统Java大师

请输入表名,多个英文逗号分割:t_user,t_menu,t_role,t_user_role,t_role_menu

1)

认证管理

流程图解读:

1、用户提交用户名、密码被SecurityFilterChain中的UsernamePasswordAuthenticationFilter过滤器获取到,封装为请求Authentication,通常情况下是UsernamePasswordAuthenticationToken这个实现类。

2、然后过滤器将Authentication提交至认证管理器(AuthenticationManager)进行认证。

3、认证成功后,AuthenticationManager身份管理器返回一个被填充满了信息的(包括上面提到的权限信息,身份信息,细节信息,但密码通常会被移除)Authentication实例。

Jwttoken由Header、Payload、Signature三部分组成,这三部分之间以小数点”.”连接,JWTtoken长这样:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.keH6T3x1z7mmhKL1T3r9sQdAxxdzB6siemGMr_6ZOwU

token解析后长这样:header部分,有令牌的类型(JWT)和签名算法名称(HS256):{"alg":"HS256","typ":"JWT"}Payload部分,有效负载,这部分可以放任何你想放的数据:

{"sub":"1234567890","name":"JohnDoe","iat":1516239022}

Signature签名部分,由于这部分是使用header和payload部分计算的,所以还可以以此来验证payload部分有没有被篡改:

HMACSHA256(

base64UrlEncode(header)+"."+

base64UrlEncode(payload),

123456//这里是密钥,只要够复杂,一般不会被破解

)

@EnableGlobalMethodSecurity(prePostEnabled=true)@SpringBootApplication@MapperScan("com.ds.book.mapper")publicclassBookSysApplication{publicstaticvoidmain(String[]args){SpringApplication.run(BookSysApplication.class,args);}}2)Controller方法上添加@PreAuthorize注解

@ComponentpublicclassMyAccessDecisionManagerimplementsAccessDecisionManager{//1、认证通过后,会往authentication中填充用户信息//2、拿authentication中的权限与上一步获取到的角色信息进行比对,比对成功后,允许访问@Overridepublicvoiddecide(Authenticationauthentication,Objectobject,CollectionconfigAttributes)throwsAccessDeniedException,InsufficientAuthenticationException{Collectionauthorities=authentication.getAuthorities();for(ConfigAttributeconfigAttribute:configAttributes){for(GrantedAuthorityauthority:authorities){if(authority.getAuthority().equals(configAttribute.getAttribute())){return;}}}thrownewAccessDeniedException("权限不足,请联系管理员");}@Overridepublicbooleansupports(ConfigAttributeattribute){returnfalse;}@Overridepublicbooleansupports(Class<>clazz){returnfalse;}}3)在SecurityConfig中,添加后置处理器(增强器),让springsecurity使用我们自己的datametasource和decisionMananger

io.springfoxspringfox-swagger22.7.0io.springfoxspringfox-swagger-ui2.7.0com.github.xiaoyminknife4j-spring-boot-starter2.0.72)创建swagger配置文件

//主要的配置文件,antMatchers匹配的路径,全部忽略,不进行JwtToken的认证@Overridepublicvoidconfigure(WebSecurityweb)throwsException{web.ignoring().antMatchers("/login","/logout","/css/**","/js/**","/index.html","favicon.ico","/doc.html","/webjars/**","/swagger-resources/**","/v2/api-docs/**");}4)编写LoginController接口,通过@Api和@ApiOperation注解使用swagger

测试成功!

注意:前后端分离项目,退出的时候,由前端清除浏览器请求header中的token和sessionStorage或者LocalStorage,后端只要返回一个退出成功的消息。

执行绿色的命令,出现下列界面代表脚手架创建项目成功2、整合elementui//命令行安装npmielement-ui-S//main.js使用element-uiimportVuefrom'vue';importElementUIfrom'element-ui';import'element-ui/lib/theme-chalk/index.css';importAppfrom'./App.vue';Vue.use(ElementUI);newVue({el:'#app',render:h=>h(App)});3、安装vue-router2.1安装依赖

npminstallvue-router@32.2创建路由文件

npminstall-gjson-server4.2创建mock文件夹,新建db.json

"mock":"json-serversrc/mock/db.json--port3000--middlewaressrc/mock/middlewares.js"4.5运行json-server,出现以下界面代表运行成功

json-server.cmd--watchdb.jso5、整合axios5.1配置axios请求拦截器,新建utils文件夹,新建api.js,输入以下内容

exportconstinitTmpRoutes=(menus)=>{lettmpRoutes=[]menus.forEach(menu=>{let{id,title,icon,path,name,children}=menuif(childreninstanceofArray){children=initTmpRoutes(children)}lettmpRoute={path:path,meta:{icon:icon,title:title},name:name,children:children,component:children.length{render(c){returnc('router-view')}}:()=>import(`@/pages${path}/${name}.vue`)}console.log('tmpRoute',tmpRoute.path)tmpRoutes.push(tmpRoute)})returntmpRoutes}exportconstinitRoutes=(menus)=>{consthomeRoute={path:'/home',name:'Home',meta:{title:'首页',icon:'el-icon-star-off'},component:()=>import('@/pages/Home.vue'),}homeRoute.children=initTmpRoutes(menus);console.log('homeRoute',homeRoute)returnhomeRoute;}6.3首页、导航页和主页

home.vue

{{item.meta.title}}RecursiveMenu.vue

{{item.meta.title}}

可以看到左边的菜单和路由已经展示在浏览器中

注意:这里有一个坑,页面刷新以后,路由中的数据就会丢失,系统菜单会不显示

原因:页面刷新后,页面会重新实例化路由数据,因为是动态路由,所以页面刷新后会将router置为router/index.js配置的原始路由数据,所以匹配路由地址的时候会报错。

解决方法

思路:因为目前login接口返回的时候,直接将菜单数据传回前端,所以我们需要将菜单缓存起来,因为每次页面刷新vuex数据都会重置,所以不适合存储在vuex中,可以将菜单数据存储在sessionStorage中,页面刷新在实例化vue的created生命周期函数之前初始化路由即可

THE END
1.图书管理系统JavaSSMJSP前后端分离管理员、用户、前台 1:登录功能、注册功能 2:管理端:主页、个人中心、图书分类管理、热门图书管理、用户管理、图书借阅管理、图书归还管理、图书入库管理、论坛管理、系统管理 3:用户端:主页、个人中心、图书借阅管理、图书归还管理、我的收藏管理 https://blog.csdn.net/Karen198/article/details/144324015
2.网站开发中的前后端分离:提高开发效率前端而后端开发人员则在自己的领域里,使用如Node.js或者SpringBoot这样的工具,处理复杂的业务逻辑和数据处理。这样一来,就像两个赛跑选手同时起跑,大大缩短了整个项目从构思到上线的时间。就拿一个电商网站来说,如果没有前后端分离,从商品展示页面的设计到后台订单处理系统的搭建,可能需要很长时间。但有了前后端分离,https://www.163.com/dy/article/JJ735UBT0556ABQ1.html
3.强大的图书管理系统(前后端分离版)ORC身份证图片号码识别 基于SpringBoot的一套强大后台管理系统 一套精简的springboot后台管理系统 Java GUI 图书管理系统 springboot仓库erp管理系统功能超强大 JavaWeb 图书管理系统 强大的图书管理系统(前后端分离版) 支付宝pc支付(springboot版),简单配置即可实现支付 Java教师信息管理系统(SpringBoot版)在线http://www.demodashi.com/demo/17567.html
4.EasyWeb:前后端分离的Java后台管理系统模板,前端采用路由单页面1、欢迎加入“前后端分离技术交流群”: 2、我要打赏: EasyWeb 2.0 简介 前后端分离模式的后端管理系统开发平台,前端使用路由实现单页面应用,后端接口遵循RESTful风格。 演示地址:http://47.98.107.251:8088 演示账号:admin 密码:admin 使用技术 https://gitee.com/liuzan/EasyWeb
5.全网开源快速开发平台,低代码平台,企业级开发平台,开源系统,私活前后端分离架构 SpringBoot 2.x,SpringCloud,Ant Design&Vue,Mybatis-plus,Shiro,JWT,支持微服务。强大的代码生成器让前后端代码一键生成,实现低代码开发! JeecgBoot引领新低代码开发模式 OnlineCoding-> 代码生成器-> 手工MERGE, 帮助Java项目解决70%的重复工作,让开发更多关注业务,既能快速提高效率,节省研发成本,https://blog.51cto.com/lovebetterworld/2860989
6.GitHub微人事是一个前后端分离的人力资源管理系统,项目采用SpringBoot+Vue开发。 vhr.javaboy.org 27.5kstars10.3kforksBranchesTagsActivity Star Notifications master BranchesTags Code Folders and files Latest commit 163 Commits vhr vuehr .gitattributes .gitignore https://github.com/lenve/vhr
7.基于springboot框架下的图书管理系统开发与实现.doc下面是图书管理系统开发过程中具体工作的详细介绍:对市面上的图书管理系统项目做了详细调查,根据调查结果,最后确定使用市面上最常用的“前后端分离技术”,用它开发系统,“前后端分离技术”不仅实现了前端和后端的分别开发,更加节省了开发系统的时间。系统前端开发使用vue框架,vue框架比别的前端框架更加轻巧,而系统后端https://www.renrendoc.com/paper/263983400.html
8.毕设项目推荐基于SpringBoot+Vue前后端分离智慧宿舍管理系统本章节将介绍基于前后端分离的智慧宿舍管理系统的实现细节。包括前端页面的实现、后端服务的实现以及数据库的设计和实现等。 系统评估 本章节将对已实现的智慧宿舍管理系统进行评估。通过对系统的性能、可扩展性和用户体验等方面进行评估,验证系统设计的有效性和可行性。 https://cloud.tencent.com/developer/article/2349894
9.构建基于前后端分离的医学影像学学习平台:Java技术实现与深度解析在构建医学影像学学习平台时,我们将采用前后端分离的架构。前端使用现代化的Web技术,如HTML5、CSS3和JavaScript,来实现用户界面和交互功能。后端使用Java作为主要编程语言,结合Spring框架和RESTful API,处理用户请求和管理数据。 数据库设计: 在医学影像学学习平台中,数据存储是至关重要的。我们可以使用关系型数据库(如https://open.alipay.com/portal/forum/post/161601045
10.基于JavaSpringBoot的前后端分离信息管理系统的设计和实现当今社会,人才的流动速度大大增加,因此也对党建工作的管理层面工作带来了空前且复杂的挑战,从而使得如何高效的开展管理党建工作成为了亟待解决的问题。本文将介绍通过Java SpringBoot实现前后端分离信息管理系统,感兴趣的同学可以了解一下+ 目录 前言 当今社会,随着科学技术的发展,以及市场经济的多元化,使人才的流动速度https://www.jb51.net/article/230303.htm
11.尚学堂官网本系统分为租客平台、业主平台、用户管理平台两大功能平台。 技术架构 SpringBoot、SpringMVC、MyBatis、SpringDataMongoDB、SpringData、ElasticSearch、MongoDB、Spring Cloud、ElasticSearch、FastDFS、Nginx、支付 项目亮点 前后端分离项目,感受目前企业开发主流的前后端分离开发模式;移动端项目,可以感受Java程序员开发apphttps://www.bjsxt.com/
12.web前端培训web前端培训班纯面授web前端培训机构Java 基础与进阶 Java 核心语法并发编程面向对象设计JavaSE高级集合与泛型 Java Web 进阶 数据库技术JavaWeb核心 B 修炼内功 全端实战阶段 Vue 开发 Vue3 基础与进阶CSS基础与进阶 小程序开发 原生小程序基础与进阶uni-app 框架实战 企业级开发 企业级开发思想和SSM前后端分离技术前后端分离项目实战 http://www.qfedu.com/html5/
13.2023届电子信息与计算机工程系优秀毕业设计作品毕业设计本系统是一款高效、稳定的医院就诊预约挂号系统。采用B/S架构和前后端分离编写方式,保证了系统的快速响应和用户友好性。后端服务器采用Java语言和Spring Boot框架,并选择了免费开源和移植性好的MySQL数据库,实现了系统的快速准确运行。本系统已成功实现了网上预约挂号等核心功能,并进一步开发了便捷登录注册、安全可靠的https://www.cdutetc.cn/c/4c068411-751b-4f12-b725-f69e34c010a3.html
14.基于SpringBoot地质档案信息系统系统采用前、后台相分离的方式进行开发设计, 系统架构如图1所示. 图1 系统架构 Web服务以Layui作为前端框架, 使用Layui搭建页面可使得页面美观、内容丰富[7]; 并结合Echarts插件优秀的绘图能力, 可以方便地绘制系统中各种数据图形, 如曲线图、柱状图、饼状图、散点图和地图等[8]. 后端使用Java作为开发编程语https://c-s-a.org.cn/html/2022/12/8834.html