springclouddemo8.1后台管理

从b站学习springcloud项目,现在进行总结,该总结除去了视频中出现的小错误,对有些易错的地方进行了提醒

b站链接:https://www.bilibili.com/video/av55629580?p=1
资料链接:
https://pan.baidu.com/s/1o0Aju3IydKA15Vo1pP4z5w
提取码: 21ru

上一节链接:
https://blog.csdn.net/qq_40893824/article/details/103643682
下一节链接:
https://blog.csdn.net/qq_40893824/article/details/103647148

下面的内容总结:

实现细节:
直接进入 http://localhost:8030/index.html :
在这里插入图片描述
因为没有用户登录,所以无法显示,我想在用户直接进入http://localhost:8030/index.html 时可以跳转至用户登录的页面:
1.创建一个过滤器,在client/southwind中创包filter,新建UserFilter.java,
可以直接继承Filter,但是选择的时候选择下图中的Filter:
在这里插入图片描述
在这里插入图片描述
再加上

@Component
@WebFilter(urlPatterns = {"/index.html"}, filterName = "userFilter")/*filterName = "userFilter" 防止重对象次数过多*/

对于doFilter部分,注意修改参数列表!代码:

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        HttpSession session = request.getSession();
        User user = (User) session.getAttribute("user");
        if (user ==null){
            response.sendRedirect("login.html");
        }else{
            filterChain.doFilter(servletRequest,servletResponse);
        }
    }

2.在client/ClientApplication中加注解@ServletComponentScan//这样过滤器(拦截器)才会生效
3.测试 进入 http://localhost:8030/index.html
在这里插入图片描述
就直接跳转登录页面了!

现在实现管理员登录:
1.在client/AccountHandler中修改login部分的代码:
case “user”:部分中 idstr 和 id 定义在上面

		String result = null;
        String idstr = null;

原来变为:

					idstr = hashMap.get("id")+"";//转成String,而不能装置转换类型!
                    id = Long.parseLong(idstr);

case “admin”:中
Admin admin = (Admin) object; 改为 Admin admin = new Admin();

@PostMapping("/login")
    public String login(@RequestParam("username")String username, @RequestParam("password")String password, @RequestParam("type")String type, HttpSession session){
        Object object = accountFeign.login(username, password, type);
        LinkedHashMap<String,Object> hashMap = (LinkedHashMap)object;
        String result = null;
        String idstr = null;
        long id = 0;
        if(object == null){
            result = "login";
        }else{
            switch (type){
                case "user":
                    User user = new User();
                    idstr = hashMap.get("id")+"";//转成String,而不能装置转换类型!
                    id = Long.parseLong(idstr);
                    String nickname = (String)hashMap.get("nickname");
                    user.setId(id);
                    user.setNickname(nickname);
                    session.setAttribute("user",user);
                    result = "index";
                    break;
                case "admin":
                    Admin admin = new Admin();
                    idstr = hashMap.get("id")+"";
                    id = Long.parseLong(idstr);
                    String username2 = (String) hashMap.get("username");
                    admin.setId(id);
                    admin.setUsername(username2);
                    session.setAttribute("admin",admin);
                    result = "main";
                    break;
            }
        }
        return result;
    }

测试
2. 进入 http://localhost:8030/login.html
在这里插入图片描述
登录后:
在这里插入图片描述
3.在client/controller/UserHandler中删除redirect部分,将save和deleteById的return中user改为menu,即通过menu中redirect后台映射

package com.southwind.controller;

import com.southwind.entity.User;
import com.southwind.entity.UserVO;
import com.southwind.feign.UserFeign;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.util.Date;


@Controller
@RequestMapping("/user")
public class UserHandler {

    @Autowired
    private UserFeign userFeign;

    /*增*/
    @PostMapping("/save")
    public String save(User user){
        user.setRegisterdate(new Date());//注册时间系统给出
        userFeign.save(user);
        return "redirect:/menu/redirect/user_manage";
    }

    /*删*/
    @GetMapping("/deleteById/{id}")
    public String deleteById(@PathVariable("id")long id){
        userFeign.deleteById(id);
        return "redirect:/menu/redirect/user_manage";
    }

    /*查*/
    @GetMapping("/findAll")
    @ResponseBody
    public UserVO findAll(@RequestParam("page") int page , @RequestParam("limit") int limit){
        int  index = (page - 1)*limit;
        UserVO userVO = new UserVO();
        userVO.setCode(0);;
        userVO.setMsg("");
        userVO.setCount(userFeign.count());
        userVO.setData(userFeign.findAll(index, limit));
        return userVO;
    }


    @GetMapping("/count")
    public int count(){
        return userFeign.count();
    }
}

4.在client/controller/MenuHandler中把deleteById、save、update最后return的路径由index改为menu_manage

package com.southwind.controller;

import com.southwind.entity.Menu;
import com.southwind.entity.MenuVO;
import com.southwind.feign.MenuFeign;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;

import java.util.List;

/*
@RestController返回数据
@Controller返回视图,对应redirect,若用@RestController,则返回”index.html“
*/
@Controller
@RequestMapping("/menu")
public class MenuHandler {

    @Autowired
    private MenuFeign menuFeign;

    @GetMapping("/findAll")
    @ResponseBody
    public MenuVO findAll(@RequestParam("page") int page , @RequestParam("limit") int limit){
        int index = (page - 1)*limit;
        return menuFeign.findAll(index , limit);
    }

    @GetMapping("/redirect/{location}")
    public String redirect(@PathVariable("location")String location){
        return location;
    }

    @GetMapping("/deleteById/{id}")
    public String deleteById(@PathVariable("id")long id){
        menuFeign.deleteById(id);
        return "redirect:/menu/redirect/menu_manage";
    }

    @GetMapping("/findTypes")
    public ModelAndView findTypes(){
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("menu_add");
        modelAndView.addObject("list" , menuFeign.findTypes());
        return modelAndView;
    }

    @PostMapping("/save")
    public String save(Menu menu){
        menuFeign.save(menu);
        return "redirect:/menu/redirect/menu_manage";
    }


    @GetMapping("/findById/{id}")
    public ModelAndView findById(@PathVariable("id")long id){
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("menu_update");
        modelAndView.addObject("menu" , menuFeign.findById(id));//该菜品的信息
        modelAndView.addObject("list" , menuFeign.findTypes());//该菜品可选择的下拉框
        return modelAndView;
    }

    @PostMapping("/update")
    public String update(Menu menu){
        menuFeign.update(menu);
        return "redirect:/menu/redirect/menu_manage";
    }
}

5.在client/main.html的第79行src中account改为menu的后台映射
6.刷新刚刚的 http://localhost:8030/account/login
在这里插入图片描述
在这里插入图片描述
想修改红框处的菜,点击编辑:
在这里插入图片描述
改成这样:
在这里插入图片描述
提交后:
在这里插入图片描述
修改成功!

添加菜品:
1.在client/main.html中d第15行< script>下的menu_add部分改为attr(“src”,"/menu/findTypes")
其他部分的路径也均改为经过menu的后台映射

<script type="text/javascript">
        $(function () {
            $("#menu_manage").click(function(){
                $("iframe").attr("src","/menu/redirect/menu_manage");
            });
            $("#menu_add").click(function(){
                $("iframe").attr("src","/menu/findTypes");
            });
            $("#order_handler").click(function(){
                $("iframe").attr("src","/menu/redirect/order_handler");
            });
            $("#user_manage").click(function(){
                $("iframe").attr("src","/menu/redirect/user_manage");
            });
            $("#user_add").click(function(){
                $("iframe").attr("src","/menu/redirect/user_add");
            });
        })
    </script>

然后 刷新 http://localhost:8030/account/login,点击添加菜品后
在这里插入图片描述
成功进入添加菜品页面
在这里插入图片描述
提交后:
在这里插入图片描述
成功添加!

2.启动user服务
刷新 http://localhost:8030/account/login,点击查询用户
在这里插入图片描述
在这里插入图片描述
提交后
在这里插入图片描述
添加用户成功!

上一节链接:
https://blog.csdn.net/qq_40893824/article/details/103643682
下一节链接:
https://blog.csdn.net/qq_40893824/article/details/103647148

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
JeeSpringCloud是一个基于SpringBoot2.0的后台权限管理系统,界面简洁美观敏捷开发系统架构。核心技术采用Spring、MyBatis、Shiro没有任何其它重度依赖。 互联网云快速开发框架,微服务分布式代码生成的敏捷开发系统架构。项目代码简洁,注释丰富,上手容易,还同时集中分布式、微服务,同时包含许多基础模块和监控、服务模块。模块包括:定时任务调度、服务器监控、平台监控、平台设置、开发平台、单点登录、Redis分布式高速缓存、会员、营销、在线用户、日志、在线人数、访问次数、调用次数、直接集群、接口文档、生成模块、代码实例、安装视频、教程文档 代码生成(单表、主附表、树表、列表和表单、redis高速缓存对接代码、图表统计、地图统计、vue.js)、dubbo、springCloud、SpringBoot、mybatis、spring、springmvc。 功能 用户管理:用户是系统操作者,该功能主要完成系统用户配置。 部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。 岗位管理:配置系统用户所属担任职务。 菜单管理:配置系统菜单,操作权限,按钮权限标识等。 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。 字典管理:对系统中经常使用的一些较为固定的数据进行维护。 参数管理:对系统动态配置常用参数。 通知公告:系统通知公告信息发布维护。 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。 登录日志:系统登录日志记录查询包含登录异常。 在线用户:当前系统中活跃用户状态监控。 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。 代码生成:前后端代码生成(单表、主附表、树表、列表和表单、增删改查云接口、redis高速缓存对接代码、图表统计、地图统计、vue.js) ,并生成菜单和权限直接使用。 系统接口:根据业务代码自动生成相关的api接口文档。 连接池监视:监视当期系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。 在线接口文档:使用swager生成在线文档。 ActiveMQ队列:提供ActiveMQ队列,处理批量发送大数据量邮件、大数据量日志文件。 工作流:功能包括在线办公、我的任务、审批测试、流程管理、模型管理。 CMS:功能包括内容管理、内容管理、统计分析、栏目设置、首页。 dubbo:代码生成直接生成dubbo对接代码。 服务器Down机邮件监控:通过定时任务监控服务器是否Down机,并发送通知邮件。 服务器监控:通过sigar进行服务器图形化监控。 异常邮件监控:全局拦截系统异常,并发送通知邮件。 单点登录:使用shior和Redis、共享session方式实现单点登录。 Redis分布式高速缓存:代码生成直接生成Redis对接代码。 特性: JeeSpringCloud基于SpringBoot+SpringMVC+Mybatis+Redis+SpringCloud+Vue.js微服务分布式代码生成的敏捷开发系统架构。项目代码简洁,注释丰富,上手容易,还同时集中分布式、微服务,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块。成为大众认同、大众参与、成就大众、大众分享的开发平台。JeeSpring官方qq群(328910546)。代码生成前端界面、底层代码(spring mvc、mybatis、Spring boot、Spring Cloud、微服务的生成)、安全框架、视图框架、服务端验证、任务调度、持久层框架、数据库连接池、缓存框架、日志管理、IM等核心技术。努力用心为大中小型企业打造全方位J2EE企业级平台ORM/Redis/Service仓库开发解决方案。一个RepositoryService仓库就直接实现dubbo、微服务、基础服务器对接接口和实现。 努力用心为大中小型企业打造全方位J2EE企业级平台开发解决方案。 Spring Boot/Spring cloud微服务是利用云平台开发企业应用程序的最新技术,它是小型、轻量和过程驱动的组件。微服务适合设计可扩展、易于维护的应用程序。它可以使开发更容易,还能使资源得到最佳利用。 微服务/集群(nignx) 支持REST风格远程调用(HTTP + JSON/XML):基于非常成熟的Spring Boot框架,在Spring Boot Spring Cloud中实现了REST风格(HTTP + JSON/XML)的远程调用,以显着简化企业内部的跨语言交互,同时显着简化企业对外的Open API、无线API甚至AJAX服务端等等的开发。 事实上,这个REST调用也使得Dubbo可以对当今特别流行的“微服务”架构提供基础性支持。 另外,REST调用也达到了比较高的性能,在基准测试下,HTTP + JSON默认的RPC协议(即TCP + Hessian2二进制序列化)之间只有1.5倍左右的差距,详见下文的基准测试报告。 ORM/Redis/Service仓库 RepositoryORM仓库,提供ORM接口和多种实现,可进行配置实现。 RepositoryRedis仓库,提供Redis接口和多种实现,可进行配置实现。可以配置调用单机、redis、云redis对接。 RepositoryService仓库,提供Service接口和多种实现,可进行配置实现。一个RepositoryService仓库就直接实现dubbo、微服务、基础服务器对接接口和实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_1403034144

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值