基于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

目录
相关文章
|
4月前
|
前端开发 Java 应用服务中间件
《深入理解Spring》 Spring Boot——约定优于配置的革命者
Spring Boot基于“约定优于配置”理念,通过自动配置、起步依赖、嵌入式容器和Actuator四大特性,简化Spring应用的开发与部署,提升效率,降低门槛,成为现代Java开发的事实标准。
|
4月前
|
前端开发 Java 微服务
《深入理解Spring》:Spring、Spring MVC与Spring Boot的深度解析
Spring Framework是Java生态的基石,提供IoC、AOP等核心功能;Spring MVC基于其构建,实现Web层MVC架构;Spring Boot则通过自动配置和内嵌服务器,极大简化了开发与部署。三者层层演进,Spring Boot并非替代,而是对前者的高效封装与增强,适用于微服务与快速开发,而深入理解Spring Framework有助于更好驾驭整体技术栈。
|
4月前
|
XML Java 应用服务中间件
【SpringBoot(一)】Spring的认知、容器功能讲解与自动装配原理的入门,带你熟悉Springboot中基本的注解使用
SpringBoot专栏开篇第一章,讲述认识SpringBoot、Bean容器功能的讲解、自动装配原理的入门,还有其他常用的Springboot注解!如果想要了解SpringBoot,那么就进来看看吧!
542 2
|
5月前
|
人工智能 Java 机器人
基于Spring AI Alibaba + Spring Boot + Ollama搭建本地AI对话机器人API
Spring AI Alibaba集成Ollama,基于Java构建本地大模型应用,支持流式对话、knife4j接口可视化,实现高隐私、免API密钥的离线AI服务。
4369 2
基于Spring AI Alibaba + Spring Boot + Ollama搭建本地AI对话机器人API
|
5月前
|
监控 JavaScript Java
2025版基于springboot的校园打印社管理系统
本系统旨在解决传统校园打印社管理效率低、排队时间长、耗材管理难等问题,集成订单管理、设备监控、耗材统计、线上预约、自助打印与在线支付等功能,提升运营效率与用户体验,助力校园信息化建设。
存储 JSON Java
693 0
|
5月前
|
人工智能 Java 开发者
【Spring】原理解析:Spring Boot 自动配置
Spring Boot通过“约定优于配置”的设计理念,自动检测项目依赖并根据这些依赖自动装配相应的Bean,从而解放开发者从繁琐的配置工作中解脱出来,专注于业务逻辑实现。
1879 0
|
6月前
|
前端开发 JavaScript Java
基于springboot+vue开发的校园食堂评价系统【源码+sql+可运行】【50809】
本系统基于SpringBoot与Vue3开发,实现校园食堂评价功能。前台支持用户注册登录、食堂浏览、菜品查看及评价发布;后台提供食堂、菜品与评价管理模块,支持权限控制与数据维护。技术栈涵盖SpringBoot、MyBatisPlus、Vue3、ElementUI等,适配响应式布局,提供完整源码与数据库脚本,可直接运行部署。
354 6
基于springboot+vue开发的校园食堂评价系统【源码+sql+可运行】【50809】

热门文章

最新文章