下载地址:OA系统
技术栈
- SpringBoot
- Mybatis
- JWToken
- Mysql
- Redis
功能模块
- 登录模块:
1.基本账号密码加密校验登录。
2.生成JWToken,存入Session,提供之后接口访问校验。 - 权限验证模块:
1.拦截器拦截每个访问的接口并校验token,校验成功放行,失败重新登录。 - 业务CRUD模块:
1.获取和校验参数方式和登录基本一致,业务内部全都通过Mybatis注解方式实现。 - 工具模块:
1.通过POI依赖封装ExcelUtils的工具类,实现Excel表的导出。
遇到问题和解决措施
- 1、Excel导出页面数据格式错误问题及解决方法
解决措施:数据库查询字段过多,修改限制查询字段即可。 - 2、权限验证方式问题及解决方法
解决措施:查询CSDN等博客,最后采用拦截器方式拦截访问接口进行权限校验。
部分核心程序
- 登录模块
// 1. 获取参数
try {
Username = request.getParameter("Name");
Password = request.getParameter("Password");
} catch (Exception e) {
request.getRequestDispatcher("web/login.jsp").forward(request, response);
}
// 2.加密
String Md5StrPassword = DigestUtils.md5DigestAsHex(Password.getBytes());
// 3.验证登录 查询权限 返回数据
employee = employeeMapper.login(Username, Md5StrPassword);
try {
if (employee.getEid() != 0) {
List<String> Soucres = getSoucres();
String token = JWToken.getToken(employee);
// token 存入 cookice
Cookie cookie = new Cookie("token", token);
cookie.setMaxAge(24 * 60 * 60 * 1000);
response.addCookie(cookie);
request.setAttribute("token", token);
request.setAttribute("Soucres", Soucres);
request.setAttribute("employee", employee);
request.getRequestDispatcher("web/index.jsp").forward(request, response);
} else {
request.getRequestDispatcher("web/login.jsp").forward(request, response);
}
} catch (Exception e){
request.getRequestDispatcher("web/login.jsp").forward(request, response);
}
- 拦截器
// 从请求头中获取jwtoken 进行校验
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String token="";
try {
token = request.getCookies()[1].getValue();
} catch (Exception e) {
response.sendRedirect("/");
return false;
}
if (token.equals("")){
response.sendRedirect("/");
return false;
} else if (JWToken.verity(token)) {
return true;
}
return false;
}
public void addInterceptors(InterceptorRegistry registry) {
// 注册IpInterceptor拦截器
InterceptorRegistration restRegistration = registry.addInterceptor(paramRestInterceptor());
// 所有路径都被拦截
restRegistration.addPathPatterns("/*");
//添加不拦截路径
restRegistration.excludePathPatterns("/login","/");
}