DC00975 基于springboot幼儿园管理系统MySQL幼儿园管理系统java web
一、项目描述
1、系统设置
用户管理(姓名 账号 出生日期 身份证号 地址 性别 移动电话 邮箱类型 操作)
页面管理
角色管理
2、校园管理
老师管理(班级名 班主任 科目 操作)
工资管理(教师 基本工资 加班工资 交通补餐 补节假日 补贴 绩效 其他发放 日期 操作)
物资管理(物品名 数量 单价 来源描述 创建时间 操作)
菜谱管理(早餐 早餐详细信息 午餐 午餐详细信息 晚餐 晚餐详细信息 创建日期 操作)
班级管理(班级名 班主任 学生数 创建时间 操作)
3、班级管理
学生管理
公告管理
课程管理
4、考勤管理
老师考勤
学生考勤
老师考勤统计
学生考勤统计
签到签退
二、运行环境
jdk1.8+idea/eclipse+maven3+mysql5.6
三、项目技术
springboot+mybatis
四、部分运行效果
五、部分代码
package com.bskms.shiro;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.*;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.session.Session;
import org.apache.shiro.subject.PrincipalCollection;
import org.apache.shiro.subject.Subject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.bskms.bean.User;
import com.bskms.mapper.UserMapper;
import com.bskms.mapper.UserRoleMapper;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* class name: CustomRealm <BR>
* class description: 自定义 Realm <BR>
*
* @version 1.00 2024年05月16日
* @author yky
*/
@Component
public class CustomRealm extends AuthorizingRealm {
/** 用户信息service */
private final UserMapper userMapper;
/** 用户权限service */
private final UserRoleMapper userRoleMapper;
/** logback日志记录 */
private final Logger logger = LoggerFactory.getLogger(CustomRealm.class);
private static Map<String, Session> sessionMap = new HashMap<>();
/**
* Method name: CustomRealm<BR>
* Description: 通过构造器注入Mapper<BR>
*
* @param userMapper
* @param userRoleMapper <BR>
*/
@Autowired
public CustomRealm(UserMapper userMapper, UserRoleMapper userRoleMapper) {
this.userMapper = userMapper;
this.userRoleMapper = userRoleMapper;
}
/**
* @Override
* @see org.apache.shiro.realm.AuthenticatingRealm#doGetAuthenticationInfo(org.apache.shiro.authc.AuthenticationToken)
* <BR>
* Method name: doGetAuthenticationInfo <BR>
* 获取身份验证信息 Description: Shiro中,最终是通过 Realm 来获取应用程序中的用户、角色及权限信息的。 <BR>
* @param authenticationToken 用户身份信息 token
* @return 返回封装了用户信息的 AuthenticationInfo 实例
* @throws AuthenticationException <BR>
*/
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken)
throws AuthenticationException {
// 获取token令牌
UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken;
// 从数据库获取对应用户名密码的用户
User user = userMapper.selectByPrimaryKey(token.getUsername());
if (null == user) {
logger.warn("{}---用户不存在", token.getUsername());
// 向前台抛出用户不存在json对象
throw new AccountException("USERNAME_NOT_EXIST");
}
String password = user.getUserPassword();
if (null == password) {
logger.warn("{}---用户不存在", token.getUsername());
// 向前台抛出用户不存在json对象
throw new AccountException("USERNAME_NOT_EXIST");
} else if (!password.equals(new String((char[]) token.getCredentials()))) {
logger.warn("{}---输入密码错误", token.getUsername());
// 向前台抛出输入密码错误json对象
throw new AccountException("PASSWORD_ERR");
}
logger.info("{}---身份认证成功", user.getUserName());
Subject subject = SecurityUtils.getSubject();
// 设置shiro session过期时间(单位是毫秒!)
subject.getSession().setTimeout(7_200_000);
Session s = subject.getSession();
String uid = user.getUserId();
try {
Session s2 = sessionMap.get(uid);
if (s2 != null) {
s2.setTimeout(0);
sessionMap.remove(s2);
}
} catch (Exception e) {
// 已经退出,但是还是有他。
sessionMap.remove(s);
}
// 把这个人登录的信息给放进全局变量
sessionMap.put(uid, s);
return new SimpleAuthenticationInfo(user, password, getName());
}
/**
* @Override
* @see org.apache.shiro.realm.AuthorizingRealm#doGetAuthorizationInfo(org.apache.shiro.subject.PrincipalCollection)
* <BR>
* Method name: doGetAuthorizationInfo <BR>
* Description: 获取授权信息 <BR>
* @param principalCollection
* @return <BR>
*/
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
// 从shro里面获取用户对象
User user = (User) SecurityUtils.getSubject().getPrincipal();
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
// 角色列表
List<String> roles = null;
// 获得该用户角色
if (null != user) {
roles = userRoleMapper.getRoles(user.getUserId());
} else {
logger.warn("用户session失效!");
}
Set<String> set = new HashSet<>();
// 需要将 role 封装到 Set 作为 info.setRoles() 的参数
for (String role : roles) {
set.add(role);
}
// 设置该用户拥有的角色
info.setRoles(set);
return info;
}
}
/**
*
*/
package com.bskms.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class ProcessInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
httpServletResponse.setHeader("Access-Control-Allow-Origin", "*");
httpServletResponse.setHeader("Access-Control-Allow-Headers", "Content-Type,Content-Length, Authorization, Accept,X-Requested-With");
httpServletResponse.setHeader("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
httpServletResponse.setHeader("X-Powered-By","Jetty");
String method= httpServletRequest.getMethod();
if (method.equals("OPTIONS")){
httpServletResponse.setStatus(200);
return false;
}
return true;
}
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
}
}