若依cloud前后端分离版本详解
一、项目构建流程:
下载对应若依代码:https:gitee。comyprojectRuoYiCloud?fromgiteesearch
下载nacos,配置nacos
运行脚本文件
项目里有脚本文件
启动nacos
startup。cmdmstandalone(需要配置jdk环境变量)
http:localhost:8848nacos账号密码nacos修改nacos配置文件
3。下载seata
配置seata
启动seate
4。启动后端各模块服务
顺序:
5。启动前端服务
动态代理的网关配置
开发bash克隆项目gitclonehttps:gitee。comyprojectRuoYiVue进入项目目录cdruoyiui安装依赖npminstall(以下备用)建议不要直接使用cnpm安装依赖,会有各种诡异的bug。可以通过如下操作解决npm下载速度慢的问题启动服务npmrundev浏览器访问http:localhost:80发布bash构建测试环境npmrunbuild:stage构建生产环境npmrunbuild:prod二、项目解析1。验证码
spring函数式编程WebFlux:
由gateway网关处理code这个请求,将它路由到validateCodeHandler这个处理器去处理,把请求路由到对应的handler去处理。
这个ValidateCodeHandler主要作用就是验证码的获取:
最后调用createCaptcha这个方法生成验证码:
setCacheObject:
调用该方法想redis中储存值,key为前缀加生成的uuid,value是验证码的答案,并且设置超时时间2分钟。
通过ImageIO将它转化为二进制写进流里面,最后将这个img转成Base64的编码通过Ajax返回给前端。2。登录
login方法:
通过该方法拿到用户的用户名、密码。
通过拿到的用户名、密码,先去验证是否为空及是否在一定范围内。
remoteUserService查询用户的信息:通过Feign调用ruoyisystem模块的getUserInfo方法。
记录用户登录的一些操作日志和获取当前的登录用户。
createToken方法:获取登录token
先生成token,uuid、用户id、用户名、ip地址,赋予token一个前缀名称,随后存入redis,key为带前缀的token,value为登录用户,并设置过期时间,最后将token返回给前端。3。前端路由守卫
去前端模块全局搜getinfo:
再搜getInfo()这个方法:
搜GetInfo:
router。beforEach(路由守卫):
前端每次路由的时候都会执行,类似于拦截器,路由之前做什么,路由之后做什么。
如果能拿到token,说明已经登录,但是你还想去login登录页面,则将页面转到首页。
如果不是去登录页面,则判断当前用户是否已拉取完userinfo信息,根据roles权限生成可访问的路由表,动态添加可访问路由表。
如果没有token:
查看去往路径是否在白名单内,如果在白名单,不需要登录直接前往,否则重定向到登录页面。
4。认证
前端拦截器:
后端拦截器(AuthFilter):
获取请求的url,对比白名单,看是否需要跳过验证。
白名单配置:从nacos配置中心的配置文件中读取白名单列表
如果不在白名单列表,则判断token的各种状态:是否有token,token是否过期等。
如果token正常,则获取用户id和用户名,判断是否为空,为空返回令牌验证失败。
最后将token存入redis,并设置过期时间。5。登出
从请求中拿到token,判断token是否为空,不为空将token加上固定的前缀,根据前缀token作为的key从redis中取出用户。如果拿到的用户不为空,删除redis用户缓存记录,记录用户退出日志。
前端:获取到退出请求将转到首页面。
6。鉴权
前端:
后端:
RequiresPermissions(monitor:online:list)
通过RequiresPermissions注解来控制权限,如果有当前菜单的权限则展示该菜单,如果没有则不展示该菜单。
该注解在ruoyicommon模块下的security里:
利用aop切面技术将使用到该注解的方法进行环绕通知。
其中就包含RequiresPermissions
角色权限:
权限验证,逻辑实现类:
校验用户是否登录,校验用户登录状态是否正常,获取当前用户的缓存信息,验证当前用户有效期。
验证当前用户是否具备某权限:
先获取该用户,再通过getPermiList()方法获取当前账号的权限列表:
如果验证未通过,则抛出异常:NotPermissionException。
该类包含鉴权方法:
验证用户是否具备某权限,如果验证未通过,则抛出异常:NotPermissionException
根据注解(RequiresPermissions)鉴权,如果验证未通过,则抛出异常:NotPermissionException
验证用户是否含有指定权限,必须全部拥有
验证用户是否含有指定权限,只需包含其中一个
判断用户是否拥有某个角色,如果验证未通过,则抛出异常:NotRoleException
根据注解(RequiresRoles)鉴权
验证用户是否含有指定角色,必须全部拥有
验证用户是否含有指定角色,只需包含其中一个
根据注解(RequiresLogin)鉴权
根据注解(RequiresPermissions)鉴权
另外还有辅助鉴权方法:
获取当前账号的角色列表方法:getRoleList()
获取当前账号的权限列表方法:getPermiList()
判断是否包含权限方法:hasPermi()
判断是否包含角色方法:hasRole()问题1。新增模块报gateway找不到路径404,postman调用接口显示500
因为新增的模块没有配置nacos里面的gateway配置文件,新增模块要新增routes路由,否则找不到。
spring:
redis:
host:localhost
port:6379
password:123456
cloud:
gateway:
discovery:
locator:
lowerCaseServiceId:true
enabled:true
routes:
认证中心
id:uavauth
uri:lb:uavauth
predicates:
Pathauth
filters:
验证码处理
CacheRequestFilter
ValidateCodeFilter
StripPrefix12。定时任务
新增一个定时任务
数据库该表新增一条数据
主要注意这三个字段的配置数字
阔腿裤下面一定不要搭小白鞋,瞧今年的街拍,这样穿是有多美阔腿裤曾经被大家认为是搭配神器,因为一条阔腿裤它适用于90的身材,不管你腿粗腿细,不管你是小个子还是高个子,阔腿裤凹造型都能够凸显出时尚感,而且一条简单的阔腿裤也能演绎出无数种穿搭
初代小两千!Nike功夫鞋新配色更骚气了!迎来20周年纪念的CLOT今年大动作不断,重磅联名一个接一个。不仅有长寿牛仔裤回归,还有TheNorthFace的联名,给大家制造了不小的惊喜。其中与Nike打造的功夫鞋CLOTx
10年老粉告诉你,海蓝之谜赫莲娜38节囤啥,把钱花在刀刃上38妇女节快到了,不知道大家有没有囤货的打算,如果有,但是又不知道囤什么,可以参考一下小编给大家整理的囤货清单。主要是一些大牌护肤品,平时大家舍不得用,可以趁这个机会多囤点。10年
女明星孙怡的性感高跟鞋今天给各位朋友们带来了1993年的女明星孙怡的性感高跟鞋美图,让我们一起来看看她的穿搭吧,大家喜欢的话多多点点赞哟。孙怡高跟鞋明星穿什么第一套,孙怡女神出席活动,身穿彩色毛衣搭配黑
遭身价上亿姊姊劝转行妳不会赚钱何超仪吐心声有压力何超仪近年投资製作不少香港独立电影。何超仪换上12种风格的服装,展现不同的人格。已故赌王何鸿燊之女何超仪近年来在好莱坞表现亮眼,与老公陈子聪成立的852电影公司也投资製作不少香港独
人到中年,不与生活为敌,拥有一个好心态就是幸福作者子墨季节轮回,总是在枯荣之间循环,渲染着青山绿水,苍茫萧瑟,云水之间,有迷茫也有期待,有希望也有光明,在岁月的长河中,荡漾着,流淌着,有波光粼粼,也有静水流深。流年似水,岁月静
一个人的成熟,从三次放下开始放下对别人的高期待有位作家说我慢慢明白了我为什么不快乐,因为我总是期待一个结果。如果我们对一个人好,就期待对方能够以同样的程度,来回报我们的好,那么,我们便容易患得患失。如果我们能
五十岁之后,做到五不要,才会有好的结局人货物时一定要知道自己的生活处境,有些事情可以做一些事情不可以做,不要过分的去依赖别人,一定要知道在这个时候我们可以去努力,同时也可以去拒绝一些事物,要是在任何时候不能够认真的去对
我花了二十年才明白,人性只能被驾驭,不能被满足,高人指点迷津很多人都在谈人性,结论无非就是人心不古,世态炎凉很多人因此而得出结论,你开窍了吗?你觉悟了吗?其实就是你看透了人情冷暖,,也吃透了人性凉薄。百分之一的人觉悟靠天赋异禀,百分之九十九
韩昶国每一次提升都是一次阵痛红地摄影春的痕迹如果认真可以听得见骨格发育时格吱格吱的声响也能够看见发根飞舞的壮景还能够感受到精神提升时的澎湃激昂既然选择必然义无反顾信念在心底坚若磐石根深枝茂忽然之间终于理解你的
浸润肺腺癌90腺泡10贴壁成为人生梦魇?磨玻璃不怕,此生定无忧我在头条搞创作第二期把健康带回家生命摆渡人圣人为而不恃,功成而不处,其不欲见贤老子今天这篇,很长很长。但是我觉得这个故事,很具有代表性,代表着很多结友的就医旅程。从开始的懵懂,四处