SSM项目案例中遇到的问题

11.20

1.项目脚手架搭建

2.登录功能

自己动手实现:
3.登录的数据校验功能

11.21

1.退出登录:

2.登录页面的拦截器:
在这里插入图片描述
拦截器把登录页面拦截了,要对登录页面登录方法 放行。
(1.配置拦截器 2.控制层:登陆的拦截方法,注意要重写接口中的所有方法,不然就会报错post not support)
3.修改数控库的表数据

4.数据库表的关联(数据)
5.实体类,映射关系:
Role
User:List< Role> roles;
UserRole
UserRoleMapper:findByUserId

6.获取菜单的方式
index页面菜单: 获得 路径+中文名

  • 菜单实体类:Menu.java:
    菜单id:private Integer id;
    菜单名字:private String menuName
    菜单路径:menuUrl
    菜单的子集:List< Menu> children=new ArrayList<>();
    构造器,getter/setter

  • MenuService.java
    MenuServiceImpl.java
    1.获取session:HttpSession session = request.getSession();
    2.获取保存的user数据:User user = (User) session.getAttribute(“user”);
    3.获取用户所有的权限信息:
    List< Role> roles = user.getRoles();
    用一个set来装权限数据Set< Auth> authAll = new HashSet< >(); ==> hashset底层是hashmap,元素作为key,所以用来装不可重复元素。
    然后把权限信息加入到set中去:

for (Role role : roles) {
	List<Auth> auths = role.getAuths();
	for (Auth auth : auths) {
		authAll.add(auth);
    }
}

List< Menu> menus = new ArrayList<>();
两次遍历 分别获得一级菜单,二级菜单

// 第一次遍历:找一级菜单
for (Auth auth : authAll) {
	if(auth.getIsMenu() != 1) {
		continue;
	}
    if(auth.getAuthParentId() == 0) {
    // 一级菜单
    menus.add(new Menu(auth.getAuthId(),auth.getAuthName(),auth.getAuthUrl()));
    }
}
// 第二次遍历:找二级菜单
for (Auth auth : authAll) {
	if(auth.getIsMenu() != 1) {
		continue;
	}
	if(auth.getAuthParentId() != 0) {
	// 遍历一级菜单
    	for (Menu menu : menus) {
        	if(menu.getId().equals(auth.getAuthParentId())) {
            	menu.getChildren().add(new Menu(auth.getAuthId(),auth.getAuthName(),auth.getAuthUrl()));
            }
		}
	}
}
  • HomeController.java中获取菜单
  • 页面:
$(function() {
        $.ajax({
            type:"post",
            url:"${pageContext.request.contextPath}/menu",
            dataType:"json",
            sucess:function(data){
                if(data.code() == 200) {
                    // 清空菜单
                    $("#nav").empty();
                    $(data.data).each(function (){
                        // 父级
                        var li = $('<li>\n' +
                            ' <a href="javascript:;">\n' +
                            ' <i class="iconfont">&#xe6b8;</i>\n' +
                            ' <cite>'+this.menuName+'</cite>\n' +
                            ' <i class="iconfont nav_right">&#xe697;</i>\n' +
                            ' </a></li>');
                        // 子集
                        if(this.children.length != 0) {
                            // 有子级
                            var ul = $('<ul class="sub-menu"> </ul>');
                            $(this.children).each(function () {
                                var li_c = $('<li>\n' +
                                    ' <a href="${pageContext.request.contextPath}'+this.menuUrl+'">\n' +
                                    ' <i class="iconfont">&#xe6b8;</i>\n' +
                                    ' <cite>'+this.menuName+'</cite>\n' +
                                    ' <i class="iconfont nav_right">&#xe697;</i>\n' +
                                    ' </a></li>');
                                // 添加到url
                                ul.append(li_c);
                            });
                            // 添加到li
                            li.append(ul);
                        }
                        // 添加到菜单的父级
                        $("#nav").append(li);
                    })
                }
            }
        })
    })

问题:
前端页面的下拉菜单点不开 —— 委托,动态生成菜单的
解决:
static–js–xadmin.js===== > 左侧菜单效果
在这里插入图片描述

Failed to execute goal org.apache.tomcat.maven:tomcat7-maven-plugin:2.2:run (default-cli) on project

错误原因到现在我还没有找到,用的Maven插件的Tomcat,做项目突然就炸了,查了一晚上错误也没查到,网上大多数解决方案都是修改pom.xml的依赖包,说是 spring 或者 jdk 版本过高,或者是项目发布重名,但是这些问题 本来用的时候 是一开始就有问题呀,怎么会突然出问题的。
最后我乱试,把 target 文件删除,然后再跑一下,居然可以了!!!又炸又开心。。。。。。

11.22

导入admin-list页面,对列表进行CRUD
第三方框架,工具介绍:MyBatis-Plus(方便开发)

  • UserServiceImpl:JsonResultList<< User> getAl(){ userMapper.}

  • AdminController.java:
    同步:一次请求,拿数据(页面加载很慢)
    异步:两次请求,先请求页面,再请求数据(页面加载比较快)

@GetMapping("/admin/list")
public String listPage(){ return “admin/admin-list”; }

@PosttMapping(“admin/list/data”)
@RespnseBody
public String JsonResult getList() { return …}

public String JsonResult del(Integet id) {
return new

  • 前端页面:
    数据填充到表格
    在这里插入图片描述
    tbody id=t_data
    $(data.data).each(function(){ }

  • 删除:
    controller层,页面的ajax

  • 权限拦截器(根据首字母排序,优先执行)
    AuthInterceptor.java
    Session session = request.getSession()
    User user = (User)session.getAttribute(“user”)
    1.先获取用户的角色
    List< Role> roles = user.getRoles();
    1.1 是超级管理员直接放行
    Boolean issupper = false;
    2.获取该用户所有权限

3.比对当前用户访问的url
3.1先获取用户的当前url
request.getServletPath() : 获取当前路径
for循环authAll
spring-web.xml 配置拦截器(注意放行的页面)在这里插入图片描述
有权限直接放行if(auth.getAuthUrl().equals(url)) { }
增加权限的异常AuthException
在MyExceptionHandler中添加auth的异常

api store:API 数据接口
在线接口文档,后端改变,前端立刻感知
(juhe.cn/docs/index/page/3)

Swagger:swagger.io
前后端沟通桥梁

发布了79 篇原创文章 · 获赞 7 · 访问量 1834

猜你喜欢

转载自blog.csdn.net/weixin_45044097/article/details/103177773
今日推荐