基于SpringBoot+Spring Security+Jpa的校园图书管理系统

简介: 本文介绍了一个基于SpringBoot、Spring Security和JPA开发的校园图书管理系统,包括系统的核心控制器`LoginController`的代码实现,该控制器处理用户登录、注销、密码更新、角色管理等功能,并提供了系统初始化测试数据的方法。

基于SpringBoot+Spring Security+Jpa的校园图书管理系统,适用于毕业设计。

import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import tgc.edu.mcy.custom.JournalUtil;
import tgc.edu.mcy.entity.Book;
import tgc.edu.mcy.entity.SysAdmin;
import tgc.edu.mcy.entity.SysRole;
import tgc.edu.mcy.entity.SysUser;
import tgc.edu.mcy.security.UserUtils;
import tgc.edu.mcy.service.BookService;
import tgc.edu.mcy.service.RoleService;
import tgc.edu.mcy.service.SysAdminService;
import tgc.edu.mcy.service.SysUserService;

@Controller
public class LoginController {
   
   
    @Autowired
    private SysUserService userDAO;
    @Autowired
    private RoleService roleDAO;
    @Autowired
    private SysAdminService sysAdminDAO;
    @Autowired
    private UserUtils userUtils;
    @Autowired
    private JournalUtil journalUtil;
    @Autowired
    private BookService bookDAO;

    @RequestMapping(value="/home",method= RequestMethod.GET)
    public String index(ModelMap map) {
   
   
        List<SysUser> list = userDAO.findAll();
        if(list.size() == 0) {
   
   
            test();
        }
        return "redirect:welCome";
    }

    /**
     * 登录
     * */
    @RequestMapping(value="dologin")
    public String login() {
   
   
        return "login";
    }

    @RequestMapping(value="/update")
    public String update() {
   
   
        return "update";
    }

    @RequestMapping(value="/update_user")
    public String update_user() {
   
   
        return "update_user";
    }

    @RequestMapping(value="/download")
    @ResponseBody
    public Object download(Integer id, HttpServletRequest request, HttpServletResponse response) {
   
   
        System.out.println("id =>" + id);
        bookDAO.download(id, request, response);
        return null;
    }

    @RequestMapping(value="/xg")
    public String xg(String pwd) {
   
   
        SysUser user = userUtils.getUser();
        BCryptPasswordEncoder encoder=new BCryptPasswordEncoder();
        user.setPassword(encoder.encode(pwd));
        userDAO.save(user);
        return "redirect:logout";
    }

    /**
     * 判断用户用是否已存在
     * */
    @RequestMapping(value="/username")
    @ResponseBody
    public Boolean username(String username) {
   
   
        SysUser user = userDAO.findByUsername(username);
        if(user == null) {
   
   
            return false;
        }else {
   
   
            return true;
        }
    }

    /**
     * 判断原密码是否正确
     * */
    @RequestMapping(value="/pwd")
    @ResponseBody
    public Boolean pwd(String password) {
   
   
        SysUser user = userUtils.getUser();
        BCryptPasswordEncoder encoder=new BCryptPasswordEncoder();
        boolean f = encoder.matches(password,user.getPassword());
        return f;
    }

    /**
     *  退出
     * */
    @RequestMapping(value="/logout1")
    public String logout1() {
   
   
        SysUser user = userUtils.getUser();
        List<SysRole> roles = user.getRoles();
        String name = null;
        for (SysRole s : roles) {
   
   
            if(s.getCode().equals("ROLE_SYSTEM")) {
   
   
                name = "系统管理员";
            }else if(s.getCode().equals("ROLE_ADMIN")) {
   
   
                name = "图书管理员";
            }else if(s.getCode().equals("ROLE_USER") || s.getCode().equals("ROLE_TEACHER")) {
   
   
                name = "用户";
            }
        }
        journalUtil.save(user.getUsername(), "退出", name);
        return "redirect:logout";
    }

    /**
     * 图书管理员日志
     * */
    @RequestMapping(value="/admin")
    public String admin() {
   
   
        SysUser user = userUtils.getUser();
        journalUtil.save(user.getUsername(), "登录", "图书管理员");
        return "redirect:main";
    }

    /**
     * 系统管理员日志
     * */
    @RequestMapping(value="/system")
    public String system() {
   
   
        SysUser user = userUtils.getUser();
        journalUtil.save(user.getUsername(), "登录", "系统管理员");
        return "redirect:main";
    }

    /**
     * 用户日志
     * */
    @RequestMapping(value="user")
    public String user() {
   
   
        SysUser user = userUtils.getUser();
        journalUtil.save(user.getUsername(), "登录", "用户");
        return "redirect:welCome";
    }

    /**
     * 系统管理员,图书管理登录
     * */
    @RequestMapping(value="/main")
    public String main() {
   
   
        return "main";
    }

    /**
     * 用户
     * */
    @RequestMapping(value="/welCome")
    public String welCome(ModelMap map, @RequestParam(defaultValue = "") String bookName,@RequestParam(defaultValue = "1") int pageNo, @RequestParam(defaultValue = "10") int pageSize, Model model) {
   
   
        System.out.println("bookName => " + bookName);
        System.out.println(pageNo + " " + pageSize);
        Page<Book> findAll;
        if (bookName.equals("")) {
   
   
            findAll = bookDAO.findAll(PageRequest.of(pageNo - 1,pageSize));
            System.out.println(findAll);
        } else {
   
   
            findAll = bookDAO.findByName(bookName, PageRequest.of(pageNo - 1,pageSize));
            System.out.println(findAll);
        }
        System.out.println(findAll);
        map.put("book", findAll);
        model.addAttribute("bookName", bookName);
        return "welCome";
    }

    @RequestMapping(value="/keyword")
    public String keyword(String str, ModelMap map) {
   
   
        List<Book> book = bookDAO.findByNumberAfterAndNameLikeOrIsbnLikeOrPressLikeOrAuthorLikeOrKindTypeLike(0, "%"+str+"%", "%"+str+"%", "%"+str+"%", "%"+str+"%", "%"+str+"%");
        map.put("book", book);
        return "book";
    }


    /**
     *   初始数据库中没有数据,先添加数据
     */
    private void test() {
   
   
        BCryptPasswordEncoder encoder=new BCryptPasswordEncoder();   //密码加密类
        SysRole role = new SysRole();        
        role.setName("系统管理员");
        role.setCode("ROLE_SYSTEM");
        roleDAO.save(role);
        SysRole role2 = new SysRole();
        role2.setName("图书管理员");
        role2.setCode("ROLE_ADMIN");
        roleDAO.save(role2);
        SysRole role3 = new SysRole();
        role3.setName("学生");
        role3.setCode("ROLE_USER");
        roleDAO.save(role3);
        SysRole role4 = new SysRole();
        role4.setName("老师");
        role4.setCode("ROLE_TEACHER");
        roleDAO.save(role4);

        SysUser user = new SysUser();
        user.setUsername("system");
        user.setPassword(encoder.encode("system")); 
        user.setName("系统管理员");
        user.getRoles().add(role);
        userDAO.save(user);

        SysAdmin sysAdmin = new SysAdmin();
        sysAdmin.setUsername("admin");
        sysAdmin.setNumber(0);
        sysAdmin.setName("图书管理员");
        sysAdmin.setPassword(encoder.encode("admin"));
        sysAdmin.getRoles().add(role2);
        sysAdminDAO.save(sysAdmin);

    }
}

校园图书管理系统

QQ:937598186

目录
相关文章
|
2月前
|
Java API 数据库
如何使用Spring Boot构建RESTful API,以在线图书管理系统为例
【10月更文挑战第9天】本文介绍了如何使用Spring Boot构建RESTful API,以在线图书管理系统为例,从项目搭建、实体类定义、数据访问层创建、业务逻辑处理到RESTful API的实现,详细展示了每个步骤。通过Spring Boot的简洁配置和强大功能,开发者可以高效地开发出功能完备、易于维护的Web应用。
81 3
|
12天前
|
存储 JavaScript 前端开发
基于 SpringBoot 和 Vue 开发校园点餐订餐外卖跑腿Java源码
一个非常实用的校园外卖系统,基于 SpringBoot 和 Vue 的开发。这一系统源于黑马的外卖案例项目 经过站长的进一步改进和优化,提供了更丰富的功能和更高的可用性。 这个项目的架构设计非常有趣。虽然它采用了SpringBoot和Vue的组合,但并不是一个完全分离的项目。 前端视图通过JS的方式引入了Vue和Element UI,既能利用Vue的快速开发优势,
69 13
|
28天前
|
监控 Java 数据库连接
详解Spring Batch:在Spring Boot中实现高效批处理
详解Spring Batch:在Spring Boot中实现高效批处理
151 12
|
28天前
|
安全 Java 测试技术
详解Spring Profiles:在Spring Boot中实现环境配置管理
详解Spring Profiles:在Spring Boot中实现环境配置管理
78 10
|
24天前
|
负载均衡 Java 开发者
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
78 5
|
2月前
|
Java 测试技术 开发者
springboot学习四:Spring Boot profile多环境配置、devtools热部署
这篇文章主要介绍了如何在Spring Boot中进行多环境配置以及如何整合DevTools实现热部署,以提高开发效率。
104 2
|
2月前
|
前端开发 Java 程序员
springboot 学习十五:Spring Boot 优雅的集成Swagger2、Knife4j
这篇文章是关于如何在Spring Boot项目中集成Swagger2和Knife4j来生成和美化API接口文档的详细教程。
226 1
|
2月前
|
Java API Spring
springboot学习七:Spring Boot2.x 拦截器基础入门&实战项目场景实现
这篇文章是关于Spring Boot 2.x中拦截器的入门教程和实战项目场景实现的详细指南。
35 0
springboot学习七:Spring Boot2.x 拦截器基础入门&实战项目场景实现
|
2月前
|
Java API Spring
springboot学习六:Spring Boot2.x 过滤器基础入门&实战项目场景实现
这篇文章是关于Spring Boot 2.x中过滤器的基础知识和实战项目应用的教程。
40 0
springboot学习六:Spring Boot2.x 过滤器基础入门&实战项目场景实现
|
2月前
|
Java 测试技术 Spring
springboot学习三:Spring Boot 配置文件语法、静态工具类读取配置文件、静态工具类读取配置文件
这篇文章介绍了Spring Boot中配置文件的语法、如何读取配置文件以及如何通过静态工具类读取配置文件。
176 0
springboot学习三:Spring Boot 配置文件语法、静态工具类读取配置文件、静态工具类读取配置文件