SpringBoot 项目(若依脚手架)5
木工项目:简易壁挂式植物架 #生活技巧# #手工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
正确输入用户名 、密码和 验证码后,重定向到 首页,结果如图:
分析:登录成功后,页面重定向到 /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的二手书交易平台系统(需求文档)