基于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天前
|
NoSQL Java Redis
redis的基本命令,并用netty操作redis(不使用springboot或者spring框架)就单纯的用netty搞。
这篇文章介绍了Redis的基本命令,并展示了如何使用Netty框架直接与Redis服务器进行通信,包括设置Netty客户端、编写处理程序以及初始化Channel的完整示例代码。
11 1
redis的基本命令,并用netty操作redis(不使用springboot或者spring框架)就单纯的用netty搞。
|
2天前
|
监控 Java 应用服务中间件
Spring和Spring Boot的区别
Spring和Spring Boot的主要区别,包括项目配置、开发模式、项目依赖、内嵌服务器和监控管理等方面,强调Spring Boot基于Spring框架,通过约定优于配置、自动配置和快速启动器等特性,简化了Spring应用的开发和部署过程。
28 19
|
1天前
|
XML Java 应用服务中间件
【Spring】运行Spring Boot项目,请求响应流程分析以及404和500报错
【Spring】运行Spring Boot项目,请求响应流程分析以及404和500报错
15 2
|
1天前
|
前端开发 安全 Java
【Spring】Spring Boot项目创建和目录介绍
【Spring】Spring Boot项目创建和目录介绍
12 2
|
3天前
|
XML 前端开发 Java
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
本文阐述了Spring、Spring Boot和Spring MVC的关系与区别,指出Spring是一个轻量级、一站式、模块化的应用程序开发框架,Spring MVC是Spring的一个子框架,专注于Web应用和网络接口开发,而Spring Boot则是对Spring的封装,用于简化Spring应用的开发。
18 0
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
|
28天前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
29天前
|
Java 数据库连接 API
【Java笔记+踩坑】Spring Data JPA
从常用注解、实体类和各层编写方法入手,详细介绍JPA框架在增删改查等方面的基本用法,以及填充用户名日期、分页查询等高级用法。
【Java笔记+踩坑】Spring Data JPA
|
2月前
|
Java Spring 数据库
怎样动动手指就能实现数据操作?Spring Data JPA背后的魔法揭秘
【8月更文挑战第31天】在Java开发中,数据库交互至关重要。传统的JDBC操作繁琐且难维护,而Spring Data JPA作为集成JPA的数据访问层解决方案,提供了CRUD等通用操作接口,显著减少代码量。通过继承`JpaRepository`,开发者能轻松实现数据的增删改查,甚至复杂查询和分页也不再困难。本文将通过示例详细介绍如何利用Spring Data JPA简化数据访问层的开发,提升代码质量和可维护性。
30 0
|
2月前
|
Java Spring
【Azure 事件中心】Spring Boot 集成 Event Hub(azure-spring-cloud-stream-binder-eventhubs)指定Partition Key有异常消息
【Azure 事件中心】Spring Boot 集成 Event Hub(azure-spring-cloud-stream-binder-eventhubs)指定Partition Key有异常消息
|
2月前
|
存储 Java 数据库

热门文章

最新文章