基于 SpringBoot + Vue 的学生公寓管理系统

学生公寓管理系统

简介

基于 SpringBoot + Vue 的学生公寓管理系统,自定义了权限拦截器进行权限认证与授权,使用 aop+log4j 进行日志记录,使用 reids 作为缓存,使用 mysql 作为数据库,使用 druid 作为数据库连接池,使用 jwt 作为前后端状态交互信息,使用 websocket 进行通知的实时推送。

功能
  • 登录注销,修改密码个人信息

  • 宿舍管理

  • 学生管理

  • 班级管理

  • 宿舍楼管理

  • 维修记录

  • 用户管理

  • 菜单管理

  • 角色管理

  • 日志

  • 通知管理

  • 退宿审核

代码

自定义权限拦截

@Component
public class SecurityInterceptor implements HandlerInterceptor {
    private final RedisUtil redisUtil;
    private final SystemFunctionService systemFunctionService;
    private final SystemRoleService systemRoleService;
    private static final Map<Match, Validate> VALIDATE_MAP = new HashMap<>();

    static {
        VALIDATE_MAP.put(Match.HAS_ANY, (userPermission, methodPermission) -> {
            for (String up : userPermission) {
                for (String mp : methodPermission) {
                    if (up.equalsIgnoreCase(mp)) {
                        return true;
                    }
                }
            }
            return false;
        });
        VALIDATE_MAP.put(Match.HAS_ALL, (userPermission, methodPermission) -> {
            int vote = 0;
            for (String up : userPermission) {
                for (String mp : methodPermission) {
                    if (up.equalsIgnoreCase(mp)) {
                        vote++;
                    }
                }
            }
            return vote == methodPermission.length;
        });
    }

    public SecurityInterceptor(RedisUtil redisUtil, SystemFunctionService systemFunctionService, SystemRoleService systemRoleService) {
        this.redisUtil = redisUtil;
        this.systemFunctionService = systemFunctionService;
        this.systemRoleService = systemRoleService;
    }

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        //获取请求的方法
        HandlerMethod handlerMethod;
        if (handler instanceof HandlerMethod) {
            handlerMethod = (HandlerMethod) handler;
        } else {
            //404
            return true;
        }
        Method method = handlerMethod.getMethod();
        //获取请求方法所需的权限
        String[] requiredPermissions;
        Match match;
        if (method.isAnnotationPresent(RequirePermission.class)) {
            RequirePermission hasPermission = method.getAnnotation(RequirePermission.class);
            requiredPermissions = hasPermission.permissions();
            match = hasPermission.matchType();
        } else {
            //方法不需要权限(无 RequirePermission 注解)
            return true;
        }

        String token = request.getHeader(Constant.HEADER_TOKEN);

        Long id = redisUtil.get(token);

        //获取该用户的权限
        List<SystemRole> roleList = systemRoleService.listByUserId(id);
        Set<String> permissions;
        if (roleList.size() == 0) {
            permissions = new HashSet<>();
        } else {
            permissions = systemFunctionService.getPermission(roleList);
        }

        //验证权限
        if (VALIDATE_MAP.get(match).validate(permissions, requiredPermissions)) {
            return true;
        }
        //权限验证失败
        throw new HttpException(HttpCode.HAS_NO_PERMISSIONS, "没有权限,请联系管理员");
    }


    private interface Validate {
        /**
         * 验证权限
         * @param userPermission 用户拥有的权限
         * @param methodPermission 方法需要的权限
         * @return 是否通过
         */
        Boolean validate(Set<String> userPermission, String[] methodPermission);
    }
}

实现通知消息的推送

@Component
@ServerEndpoint("/ws/{name}")
public class WebSocket {

    private Session session;

    private String name;

    public final static Map<String,WebSocket> WEB_SOCKET_SET = new ConcurrentHashMap<>();

    @OnOpen
    public void onOpen(Session session,@PathParam(value = "name") String name){
        this.session = session;
        this.name = name;
        WEB_SOCKET_SET.put(name,this);
    }

    @OnClose
    public void onClose(){
        WEB_SOCKET_SET.remove(name);
    }

    @OnMessage
    public void onMessage(String message) throws JsonProcessingException {
        Message m = new ObjectMapper().readValue(message, Message.class);
        System.out.println(m);
    }

    /**
     * 发送消息
     * @param userId 目标用户id
     * @param message 消息内容
     * @param systemUserService 。
     */
    public static boolean sendMessage(Long userId, Message message, SystemUserService systemUserService) {
        SystemUser systemUser = systemUserService.get(userId).orElseThrow(() -> new HttpException(HttpCode.FAILED, "用户不存在"));
        if (WEB_SOCKET_SET.containsKey(systemUser.getLoginName())) {
            ObjectMapper objectMapper = new ObjectMapper();
            try {
                WEB_SOCKET_SET.get(systemUser.getLoginName()).session.getBasicRemote()
                        .sendText(objectMapper.writeValueAsString(message));
                return true;
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return false;
    }
}
示例

登录

在这里插入图片描述

管理员主页

在这里插入图片描述

宿舍管理

在这里插入图片描述

学生管理

在这里插入图片描述

班级管理

在这里插入图片描述

宿舍楼管理

在这里插入图片描述

维修记录

在这里插入图片描述

用户管理

在这里插入图片描述

角色管理

在这里插入图片描述

在这里插入图片描述

菜单管理
在这里插入图片描述

在这里插入图片描述

日志记录

在这里插入图片描述

消息

在这里插入图片描述

审核

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于SpringbootVue的课程管理系统是一个功能强大的学校或培训机构管理学生和课程的系统系统具有以下主要功能: 1. 用户管理:该系统允许管理员创建和管理用户账户。管理员可以添加、编辑和删除教师和学生账户,并设置其权限。 2. 课程管理管理员可以添加、编辑和删除课程。每个课程包括课程名称、描述、教师和学生等信息。管理员还可以根据需要将课程分配给特定的教师。 3. 学生管理管理员可以管理学生信息,包括添加、编辑和删除学生学生信息包括姓名、年龄、性别和联系方式等。管理员可以将学生分配到不同的班级或课程中。 4. 教师管理管理员可以管理教师信息,包括添加、编辑和删除教师。教师信息包括姓名、教龄和专业等。教师可以查看自己所授课程的详细信息,并进行相关操作。 5. 成绩管理系统提供学生成绩管理功能。教师可以输入学生的成绩,并将其保存到系统中。系统还支持根据学生或课程进行成绩查询和统计。 6. 通知与反馈:系统允许管理员和教师发送通知给学生或其他教师。学生和教师可以收到通知,并进行回复或反馈。 7. 数据统计与报表:系统可以生成各种统计报表,如学生人数统计、课程统计等。管理员和教师可以根据这些报表进行决策和分析。 基于SpringbootVue的课程管理系统具有良好的用户界面和功能,可以提高学校或培训机构的管理效率和学生教学体验。同时,系统还支持待扩展和定制化,可以根据具体需求进行功能升级和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值