当前位置: 首页 > news >正文

基于springboot,vue企业网盘系统

开发工具:IDEA

服务器:Tomcat9.0, jdk1.8

项目构建:maven

数据库:mysql5.7

系统分前后台,采用前后端分离

前端技术:vue+elementUI等框架实现

服务端技术:springboot+jpa

项目功能描述:

1.登录、注册、首页

2.用户管理:添加用户、修改用户、删除用户、查询用户、分配角色等功能

3.权限管理:

(1)角色列表:添加、修改、删除、分配权限

(2)权限列表

4.文件管理

(1)文件上传

(2)文件列表:分享文件、详情、下载文件、删除文件

5.个人中心:修改个人信息和修改密码

6.退出登录

 

 

 

 

 

 

 

 

 

 

package com.kcqnly.application.controller;

import cn.hutool.core.util.StrUtil;
import com.kcqnly.application.common.Result;
import com.kcqnly.application.entity.Role;
import com.kcqnly.application.entity.User;
import com.kcqnly.application.model.UserInfo;
import com.kcqnly.application.model.UserList;
import com.kcqnly.application.model.UserParam;
import com.kcqnly.application.service.RoleService;
import com.kcqnly.application.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.core.Authentication;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;


@RestController
public class UserController {

    @Autowired
    private UserService userService;
    @Autowired
    private RoleService roleService;
    @Autowired
    private BCryptPasswordEncoder bCryptPasswordEncoder;

    @PreAuthorize("hasAuthority('用户列表')")
    @GetMapping("/users")
    public Result getUserList(String query, int pageNum, int pageSize) {

        if (StrUtil.isEmpty(query) || StrUtil.isBlank(query)) {
            List<UserParam> userParams = new ArrayList<>();
            List<User> userList = userService.findAll(pageNum - 1, pageSize);
            for (User user : userList) {
                userParams.add(new UserParam(user));
            }
            UserList res = new UserList(userService.getTotal(), pageNum, userParams);
            return Result.ok("获取用户列表成功", res);
        } else {
            List<UserParam> userParams = new ArrayList<>();
            List<User> userList = userService.findByUsernameLike(query);
            for (User user : userList) {
                userParams.add(new UserParam(user));
            }
            UserList res = new UserList(userParams.size(), pageNum, userParams);
            return Result.ok("查询成功", res);
        }


    }

//    @PreAuthorize("hasAuthority('添加用户')")
    @PostMapping("/users")
    public Result addUser(@RequestBody User user) {
        if (userService.findByUsername(user.getUsername()) != null) {
            return Result.error("用户名已存在");
        }
        String rawPassword = user.getPassword();
        user.setState(true);
        user.setRole(roleService.findById(1));
        user.setPassword(new BCryptPasswordEncoder().encode(rawPassword));
        user.setUseSize(0f);
        user.setSurplusSize(user.getMaxSize());
        user.setCreateTime(new Date());
        user.setUpdateTime(new Date());
        userService.save(user);
        return Result.ok("添加成功", new UserParam(user));
    }

    @PreAuthorize("hasAuthority('设置用户状态')")
    @PostMapping("/users/{id}/state/{state}")
    public Result changeState(@PathVariable("id") int id, @PathVariable("state") boolean state) {
        UserParam userParam = new UserParam(userService.updateState(id, state));
        return Result.ok("更新成功", userParam);
    }

    /**
     * 编辑用户信息时,弹框内的用户数据
     *
     */
    @PreAuthorize("hasAuthority('用户列表')")
    @GetMapping("/users/{id}")
    public Result search(@PathVariable("id") int id) {
        User user =userService.findById(id);
        if (user!=null) {
            UserParam userParam = new UserParam(user);
            return Result.ok("搜索成功", userParam);
        }
        return Result.error("用户id不存在");
    }

    @PreAuthorize("hasAuthority('删除用户')")
    @DeleteMapping("/users/{id}")
    public Result deleteUser(@PathVariable("id") int id) {
        userService.deleteById(id);
        return Result.ok("删除成功", null);
    }

    @PreAuthorize("hasAuthority('获取用户详情')")
    @PutMapping("/users/{id}")
    public Result changeInformation(@PathVariable("id") int id, @RequestBody UserParam req) {
        UserParam userParam = new UserParam(userService.updateInformation(id, req.getMobile(), req.getEmail(),req.getMaxSize()));
        return Result.ok("更新成功", userParam);
    }

    @PreAuthorize("hasAuthority('分配用户角色')")
    @PutMapping("/users/{id}/role")
    public Result changeRole(@PathVariable("id") int id, @RequestBody Role role) {
        UserParam userParam = new UserParam(userService.updateRole(id, role.getId()));
        return Result.ok("成功", userParam);
    }

    /**
     * 用户个人设置
     *
     */
    @GetMapping("/users/info")
    public Result getCurrentUser(Authentication authentication) {

        User user = (User) authentication.getPrincipal();
        UserInfo userInfo = new UserInfo(user);
        return Result.ok(userInfo);
    }

    @PostMapping("/users/checkPass")
    public Result checkPassword(Authentication authentication, String password) {
        User user = (User) authentication.getPrincipal();
        if (bCryptPasswordEncoder.matches(password, user.getPassword())) {
            return Result.ok(null);
        } else {
            return Result.error("原密码错误");
        }
    }

    @PostMapping("/users/updatePassword")
    public Result updatePassword(Authentication authentication,String password)
    {
        User user = (User) authentication.getPrincipal();
        user.setPassword(bCryptPasswordEncoder.encode(password));
        userService.save(user);
        return Result.ok("更新密码成功",null);
    }
}
package com.kcqnly.application.controller;

import cn.hutool.core.util.StrUtil;
import com.kcqnly.application.common.GoFastDfsApi;
import com.kcqnly.application.common.Result;
import com.kcqnly.application.utils.FileUtil;
import com.kcqnly.application.utils.SecurityUtil;
import com.kcqnly.application.utils.UploadUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;


@RestController
public class UploadController {
    @Value("${upload.temp.path}")
    private String tempPath;

    @Value("${fileServer.url}")
    private String serverUrl;

    @Value("fileServer.showUrl")
    private String showUrl;

    @PostMapping("/file/upload/")
    @PreAuthorize("hasAuthority('文件列表')")
    public Result moreFileUpload(@RequestBody MultipartFile file,  String path) {
        String scene = path;
        if (file.isEmpty()) {
            return Result.error("请选择文件");
        }
        //判断是否超过剩余空间
        if (!FileUtil.isUpload(file.getSize())){
            return Result.error("文件超出剩余空间");
        }

        if (path.contains("/")) {
            scene = path.substring(0, path.lastIndexOf("/"));
        }
        //加上用户名前缀,区分是哪个用户的
        path= SecurityUtil.getLoginUsername()+"/"+path;
        //path="img/壁纸" scene="img"
        return UploadUtil.upload(tempPath, serverUrl + GoFastDfsApi.UPLOAD, path, scene, file, showUrl);
    }
}

相关文章:

  • Dreamweaver:Dreamweaver软件的界面简介、安装、案例应用之详细攻略
  • Atlas数据治理
  • echarts拖动进度条,动态更新数据
  • MATLAB | MATLAB中绘图的奇淫技巧合集
  • 指针笔试题解析(4)
  • [Spring Boot 3] 整合NoSQL与构建RESTful服务
  • 基于非线规划算法的船舶能量调度
  • 二、PL/SQL 编程基础
  • NGINX源码之:ngx_open_cached_file
  • 【路径规划-机器人栅格地图】基于蚁群算法求解大规模栅格地图路径规划及避障附Matlab代码
  • SpringCache的介绍和使用
  • java-php-python-ssm艾灸减肥管理网站计算机毕业设计
  • 力扣每日一题2022-09-23中等题:设计链表
  • 内存数据库简介-内存数据库性能排行
  • 【云原生】Hadoop on k8s 环境部署
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 2017年终总结、随想
  • Create React App 使用
  • Java基本数据类型之Number
  • JAVA之继承和多态
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • PhantomJS 安装
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • spring + angular 实现导出excel
  • Spring核心 Bean的高级装配
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 理清楚Vue的结构
  • 前端设计模式
  • 前端之React实战:创建跨平台的项目架构
  • 深度学习中的信息论知识详解
  • 使用权重正则化较少模型过拟合
  • 学习JavaScript数据结构与算法 — 树
  • 一个完整Java Web项目背后的密码
  • 第二十章:异步和文件I/O.(二十三)
  • #{}和${}的区别是什么 -- java面试
  • #ifdef 的技巧用法
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • (02)Hive SQL编译成MapReduce任务的过程
  • (06)金属布线——为半导体注入生命的连接
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (转)大型网站的系统架构
  • (转)项目管理杂谈-我所期望的新人
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • /3GB和/USERVA开关
  • @开发者,一文搞懂什么是 C# 计时器!