SpringBoot 项目(若依脚手架)5

发布时间:2024-12-19 16:04

木工项目:简易壁挂式植物架 #生活技巧# #手工DIY技巧# #木工DIY项目#

前言:

上一章 “SpringBoot 项目(若依脚手架)4”的最后登录完成后,重定向到 /index 首页报 404 ,本章就是解决 登录系统后显示首页内容。

目录

一、简单处理404错误

二、提前展示本章节完成后的效果

三、编写Controller 层代码

四、编写model 层

五、编写Service 层

六、编写 Mapper层

七、编写 index.html

八、启动项目,完成登录系统后报错

九、thymeleaf 模板调用后台

十、重启服务,重写登录

一、简单处理404错误

即登录成功后,跳转到 /index 页面,/index页面中显示 ”欢迎来到首页!!!“ 字样

1)创建 SysIndexController 类,处理 /index 请求

package com.ruoyi.web.controller.system;

import com.ruoyi.common.core.controller.BaseController;

import org.springframework.stereotype.Controller;

import org.springframework.ui.ModelMap;

import org.springframework.web.bind.annotation.GetMapping;

@Controller

public class SysIndexController extends BaseController {

@GetMapping("/index")

public String index(ModelMap mmap){

return "/index";

}

}

2)创建 template/index.html 文件,内容如下:

欢迎来到首页!!!

3)启动项目,登录测试

首先访问首页地址:http://localhost:8080/index  ,

由于没有登录,被shiro拦截请求,重定向地址到 http://localhost:8080/login

正确输入用户名 、密码和 验证码后,重定向到 首页,结果如图:

二、提前展示本章节完成后的效果

三、编写Controller 层代码

分析:登录成功后,页面重定向到 /index,因此编写 SysIndexController 类处理, /index 请求。

在 SysIndexController 类中,我们需要将当前登录 user 对象、user所拥有的菜单对象放入 map中传入前端页面,代码如下:

package com.ruoyi.web.controller.system;

import com.ruoyi.common.core.controller.BaseController;

import com.ruoyi.system.domain.SysMenu;

import com.ruoyi.system.domain.SysUser;

import com.ruoyi.system.service.ISysMenuService;

import org.apache.shiro.SecurityUtils;

import org.springframework.stereotype.Controller;

import org.springframework.ui.ModelMap;

import org.springframework.web.bind.annotation.GetMapping;

import javax.annotation.Resource;

import java.util.List;

@Controller

public class SysIndexController extends BaseController {

@Resource

private ISysMenuService menuService;

@GetMapping("/index")

public String index(ModelMap mmap){

SysUser user = (SysUser)SecurityUtils.getSubject().getPrincipal();;

List<SysMenu> menus = menuService.selectMenusByUser(user);

mmap.put("menus", menus);

mmap.put("user", user);

return "/index";

}

}

四、编写model 层

创建 SysMenu

package com.ruoyi.system.domain;

import com.ruoyi.common.core.domain.BaseEntity;

import lombok.Data;

import java.util.ArrayList;

import java.util.List;

@Data

public class SysMenu extends BaseEntity {

private Long menuId;

private String menuName;

private String parentName;

private Long parentId;

private String orderNum;

private String url;

private String target;

private String menuType;

private String visible;

private String perms;

private String icon;

private List<SysMenu> children = new ArrayList<>();

}

补充:上述代码中的 List 集合属性,需要new ArrayList() ,这样可以避免以后用到这个对象的时候出现空指针异常

五、编写Service 层

编写 ISysMenuService 接口

package com.ruoyi.system.service;

import com.ruoyi.system.domain.SysMenu;

import com.ruoyi.system.domain.SysUser;

import java.util.List;

public interface ISysMenuService {

public List<SysMenu> selectMenusByUser(SysUser user);

}

编写 ISysMenuService 接口实现类 SysMenuServiceImpl

SysMenuServiceImpl 中主要是 selectMenusByUser 方法获取当前用户对于的菜单列表,而 getChildPerms、recursionFn、getChildList、hasChild 四个方法主要是用来构建菜单的树模型(也就是递归获取当前用户所有的子菜单)

package com.ruoyi.system.service.impl;

import com.ruoyi.system.domain.SysMenu;

import com.ruoyi.system.domain.SysUser;

import com.ruoyi.system.mapper.SysMenuMapper;

import com.ruoyi.system.service.ISysMenuService;

import org.springframework.stereotype.Service;

import javax.annotation.Resource;

import java.util.*;

@Service

public class SysMenuServiceImpl implements ISysMenuService {

@Resource

private SysMenuMapper menuMapper;

@Override

public List<SysMenu> selectMenusByUser(SysUser user) {

List<SysMenu> menus = new LinkedList<>();

if (user.isAdmin()) {

menus = menuMapper.selectMenuNormalAll();

} else {

menus = menuMapper.selectMenusByUserId(user.getUserId());

}

return getChildPerms(menus, 0);

}

public List<SysMenu> getChildPerms(List<SysMenu> list, int parentId) {

List<SysMenu> returnList = new ArrayList<>();

for (SysMenu menu : list) {

if (menu.getParentId() == parentId) {

recursionFn(list, menu);

returnList.add(menu);

}

}

return returnList;

}

private void recursionFn(List<SysMenu> list, SysMenu t) {

List<SysMenu> childList = getChildList(list, t);

t.setChildren(childList);

for (SysMenu tChild : childList) {

if (hasChild(list, tChild)) {

Iterator<SysMenu> it = childList.iterator();

while (it.hasNext()) {

SysMenu n = (SysMenu) it.next();

recursionFn(list, n);

}

}

}

}

private List<SysMenu> getChildList(List<SysMenu> list, SysMenu t) {

List<SysMenu> tlist = new ArrayList<SysMenu>();

Iterator<SysMenu> it = list.iterator();

while (it.hasNext()) {

SysMenu n = (SysMenu) it.next();

if (n.getParentId().longValue() == t.getMenuId().longValue()) {

tlist.add(n);

}

}

return tlist;

}

private boolean hasChild(List<SysMenu> list, SysMenu t) {

return getChildList(list, t).size() > 0 ? true : false;

}

}

因很多地方都需要判断 当前用户是否是 admin 所以在 SysUser 类加上 isAdmin 方法来判断

public boolean isAdmin(){

return isAdmin(

网址:SpringBoot 项目(若依脚手架)5 https://www.yuejiaxmz.com/news/view/519208

相关内容

二手家电交易系统(SpringBoot,SSM,MySQL)
SpringBoot项目中MybatisPlus的使用
【网站项目】基于springboot的生活信息分享平台
Springboot配置 logback日志框架,且自动清理生效
基于微信小程序旧物共享平台设计和实现java+springboot的项目
【网站项目】基于springboot的二手物品交易平台设计和实现
措施费的计算方法因费用项目不同而不完全统一,例如:脚手架搭拆费=脚手架摊销量×脚
Springboot计算机毕业设计校园二手市场平台z5q40
Springboot基于SpringBoot的宠物门诊系统6f8jy
基于Springboot+vue的二手书交易平台系统(需求文档)

随便看看