前后台可以正式接通以后,我们就可以设计基础的几个数据库表了,菜单表、角色表、用户表、角色菜单表和用户角色表,有这5个表我们就可以搞定用户权限。 因为要开始涉及数据库操作,每个表的单表操作我们都会创建Controller、Service、Entity、Mapper、MapperXML,我们先来新建数据库表结构,先建立最基础的表结构,后续有需要再完善,毕竟使用了MybatisPlus,改变结构之后只需要在实体类加属性就好了。 用户表:CREATETABLEsysuser(idint(11)NOTNULLAUTOINCREMENT,usernamevarchar(20)NOTNULLCOMMENT用户名,passwordvarchar(200)NOTNULLCOMMENT密码,saltvarchar(10)DEFAULTNULLCOMMENT盐,namevarchar(64)DEFAULTNULLCOMMENT姓名,createtimedatetimeDEFAULTCURRENTTIMESTAMPCOMMENT创建时间,createbyint(11)DEFAULTNULLCOMMENT创建者,updatetimedatetimeDEFAULTCURRENTTIMESTAMPONUPDATECURRENTTIMESTAMPCOMMENT修改时间,updatebyint(11)DEFAULTNULLCOMMENT修改人,PRIMARYKEY(id))ENGINEInnoDBAUTOINCREMENT2DEFAULTCHARSETutf8COMMENT用户账户; 角色表:CREATETABLEsysrole(idint(11)NOTNULLAUTOINCREMENT,labelvarchar(200)DEFAULTNULLCOMMENT角色名称,aliasvarchar(100)DEFAULTNULLCOMMENT角色别名,sortint(11)DEFAULT0COMMENT排序,createtimedatetimeDEFAULTCURRENTTIMESTAMPCOMMENT创建时间,createbyint(11)DEFAULTNULLCOMMENT创建者,updatetimedatetimeDEFAULTCURRENTTIMESTAMPONUPDATECURRENTTIMESTAMPCOMMENT修改时间,updatebyint(11)DEFAULTNULLCOMMENT修改人,PRIMARYKEY(id))ENGINEInnoDBDEFAULTCHARSETutf8COMMENT角色表; 用户角色表:CREATETABLEsysuserrole(idint(11)DEFAULTNULL,useridint(11)DEFAULTNULL,roleidint(11)DEFAULTNULL)ENGINEInnoDBDEFAULTCHARSETutf8COMMENT用户角色表; 菜单表:CREATETABLEsysmenu(idint(11)NOTNULLAUTOINCREMENT,parentidint(11)DEFAULTNULLCOMMENT上级菜单,titlevarchar(200)DEFAULTNULLCOMMENT显示名称,typevarchar(10)DEFAULTNULLCOMMENT类型,namevarchar(100)DEFAULTNULLCOMMENT别名,iconvarchar(100)DEFAULTNULLCOMMENT菜单图标,pathvarchar(100)DEFAULTNULLCOMMENT路由地址,redirectvarchar(200)DEFAULTNULLCOMMENT重定向,activevarchar(200)DEFAULTNULLCOMMENT菜单高亮,componentvarchar(100)DEFAULTNULLCOMMENT视图,colorvarchar(10)DEFAULTNULLCOMMENT颜色,hiddenbit(1)DEFAULTb0COMMENT隐藏菜单,hiddenbreadcrumbbit(1)DEFAULTb0COMMENT隐藏面包屑,createtimedatetimeDEFAULTCURRENTTIMESTAMPCOMMENT创建时间,createbyint(11)DEFAULTNULLCOMMENT创建者,updatetimedatetimeDEFAULTCURRENTTIMESTAMPONUPDATECURRENTTIMESTAMPCOMMENT修改时间,updatebyint(11)DEFAULTNULLCOMMENT修改人,PRIMARYKEY(id))ENGINEInnoDBDEFAULTCHARSETutf8COMMENT菜单表; 角色菜单表:CREATETABLEsysrolemenu(idint(11)NOTNULLAUTOINCREMENT,roleidint(11)DEFAULTNULLCOMMENT角色ID,menuidint(11)DEFAULTNULLCOMMENT菜单ID,PRIMARYKEY(id))ENGINEInnoDBDEFAULTCHARSETutf8COMMENT角色菜单表; 在用户表中插入超管账号:INSERTINTOdemo。sysuser(id,username,password,salt,name,createtime,createby,updatetime,updateby)VALUES(1,admin,admin,123456,超级管理员,DEFAULT,NULL,DEFAULT,NULL) 引入Lombok方便写实体类dependencygroupIdorg。projectlombokgroupIdlombokartifactIdversion1。18。22versiondependency 新建用户相关类:DataTableName(sysuser)publicclassSysUserEntity{TableIdprivateLprivateSprivateSprivateSprivateSprivateLocalDateTimecreateTprivateLongcreateBy;privateLocalDateTimeupdateTprivateLongupdateBy;}MapperpublicinterfaceSysUserMapperextendsBaseMapperSysUserEntity{}publicinterfaceSysUserServiceextendsIServiceSysUserEntity{根据用户名获取用户信息paramusernamereturnSysUserEntitygetUserByUserName(Stringusername);}program:description:用户服务层author:create:2022012716:58Service(sysUserService)publicclassSysUserServiceImplextendsServiceImplSysUserMapper,SysUserEntityimplementsSysUserService{OverridepublicSysUserEntitygetUserByUserName(Stringusername){returnthis。baseMapper。selectOne(newLambdaQueryWrapperSysUserEntity()。eq(SysUserEntity::getUsername,username));}} 修改完善部分登录服务代码:RestControllerRequestMapping()publicclassLoginController{AutowiredprivateLoginServiceloginSPostMapping(token)publicSaResultdoLogin(RequestBodyLoginFormform)throwsException{MapString,ObjectdataloginService。login(form);returnSaResult。data(data);}}publicinterfaceLoginService{MapString,Objectlogin(LoginFormform)throwsE}Service(loginService)publicclassLoginServiceImplimplementsLoginService{AutowiredprivateSysUserServiceuserSOverridepublicMapString,Objectlogin(LoginFormform)throwsException{验证码校验用户是否存在校验SysUserEntityuseruserService。getUserByUserName(form。getUsername());System。out。println(user);if(usernull){thrownewException(用户不存在);}密码校验用户登录StpUtil。login(form。getUsername());返回结果MapString,ObjectdatanewHashMap();data。put(token,StpUtil。getTokenValue());data。put(userInfo,{dashboard:0,userId:1,userName:Administrator,role:〔SA,admin,Auditor〕});}} 重启项目调用登录,控制台输出一下内容 LoginForm(usernameadmin,password21232f297a57a5a743894a0e4a801fc3) SysUserEntity(id1,usernameadmin,passwordadmin,salt123456,name超级管理员,createTime20220127T17:14:16,createBynull,updateTime20220127T17:14:16,updateBynull) SaLog:账号〔admin〕登录成功 整体登录流程就是这样了,继续完善。先确定密码加密方式: md5(md5(password)md5(salt)) 在测试类中生成密码存到数据库中TestpublicvoidcreatePass(){System。out。println(SaSecureUtil。md5(SaSecureUtil。md5(admin)SaSecureUtil。md5(20f883)));} 登录接口中密码已经在前端经过md5加密,所以修改后端代码if(usernull){用户不存在thrownewException(账号密码错误);}密码校验StringpasswordSaSecureUtil。md5(form。getPassword()SaSecureUtil。md5(user。getSalt()));if(!user。getPassword()。equals(password)){thrownewException(账号密码错误);} 新建菜单ControllerRestControllerRequestMapping(systemmenu)publicclassSysMenuController{创建几个静态路由GetMapping(my)publicSaResultmy(){MapString,ObjectdatanewHashMap();ListSysMenuDTOmenunewArrayList();ListStringpermissionsnewArrayList();permissions。add(list。add);permissions。add(list。edit);permissions。add(list。delete);permissions。add(user。add);permissions。add(user。edit);permissions。add(user。delete);data。put(permissions,permissions);SysMenuDTOmenuitemnewSysMenuDTO(home,home,home,首页,eliconelemefilled,menu,null);ListSysMenuDTOchildrensnewArrayList();childrens。add(newSysMenuDTO(dashboard,dashboard,home,控制台,eliconmenu,menu,true));childrens。add(newSysMenuDTO(userCenter,userCenter,userCenter,个人信息,eliconuser,menu,null));menuitem。setChildren(childrens);menu。add(menuitem);menuitemnewSysMenuDTO(setting,setting,settingsystem,配置,eliconsetting,menu,null);childrensnewArrayList();childrens。add(newSysMenuDTO(settingMenu,settingmenu,settingmenu,菜单管理,eliconfold,menu,null));menuitem。setChildren(childrens);menu。add(menuitem);data。put(menu,menu);returnSaResult。data(data);}} 重启登录 获取到的菜单 OK,接下来从完善菜单管理开始逐步写。