校园外卖点餐系统——Day02【员工管理业务开发】

您的支持将是我创作的动力 , 让我们一起加油进步吧!!!
一、完善登录功能 1. 问题分析
前面我们已经完成了后台系统的员工登录功能开发 , 但是还存在一个问题:用户如果不登录 , 直接访问系统首页面 , 照样可以正常访问 。
这种设计并不合理 , 我们希望看到的效果应该是 , 只有登录成功后才可以访问系统中的页面 , 如果没有登录则跳转到登录页面 。
那么 , 具体应该怎么实现呢?
答案就是使用过滤器或者拦截器 , 在过滤器或者拦截器中判断用户是否已经完成登录 , 如果没有登录则跳转到登录页面 。
2. 代码实现
【校园外卖点餐系统——Day02【员工管理业务开发】】/*** 检查用户是否已经完成登录*/@Slf4j@WebFilter(filterName = "LoginCheckFilter", urlPatterns = "/*")public class LoginCheckFilter implements Filter {//路径匹配器 , 支持通配符public static final AntPathMatcher PATH_MATCHER = new AntPathMatcher();@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest) servletRequest;HttpServletResponse response = (HttpServletResponse) servletResponse;//1、获取本次请求的URIString requestURI = request.getRequestURI();// /backend/index.htmllog.info("拦截到请求:{}", requestURI);//定义不需要处理的请求路径String[] urls = new String[]{"/employee/login","/employee/logout","/backend/**","/front/**"};//2、判断本次请求是否需要处理boolean check = check(urls, requestURI);//3、如果不需要处理 , 则直接放行if(check) {log.info("本次请求{}不需要处理", requestURI);filterChain.doFilter(request, response);return;}//4、判断登录状态 , 如果已登录 , 则直接放行if(request.getSession().getAttribute("employee") != null){log.info("用户已登录 , 用户id为:{}", request.getSession().getAttribute("employee"));filterChain.doFilter(request, response);return;}log.info("用户未登录");//5、如果未登录则返回未登录结果 , 通过输出流方式向客户端页面响应数据response.getWriter().write(JSON.toJSONString(R.error("NOTLOGIN")));return;}/*** 路径匹配 , 检查本次请求是否需要放行* @param urls* @param requestURI* @return*/public boolean check(String[] urls, String requestURI){for (String url : urls) {boolean match = PATH_MATCHER.match(url, requestURI);if(match) {return true;}}return false;}}
二、新增员工 1. 需求分析
后台系统中可以管理员工信息 , 通过新增员工来添加后台系统用户 。点击 “添加员工”按钮跳转到新增页面 , 如下:
2. 数据模型
新增员工 , 其实就是将我们新增页面录入的员工数据插入到表 。需要注意 , 表中对字段加入了唯一约束 , 因为是员工的登录账号 , 必须是唯一的 。
3. 代码开发
/*** 新增员工* @param employee* @return*/@PostMappingpublic R save(HttpServletRequest request, @RequestBody Employee employee) {log.info("新增员工 , 员工信息:{}", employee.toString());//设置初始密码为123456 , 需要进行md5加密处理employee.setPassword(DigestUtils.md5DigestAsHex("1232456".getBytes()));employee.setCreateTime(LocalDateTime.now());employee.setUpdateTime(LocalDateTime.now());//获取当前登录用户登录的idLong empId = (Long)request.getSession().getAttribute("employee");employee.setCreateUser(empId);employee.setUpdateUser(empId);employeeService.save(employee);return R.success("新增员工成功");}
前面的程序还存在一个问题 , 就是当我们在新增员工时输入的账号已经存在 , 由于表中对该字段加入了唯一约束 , 此时程序会抛出异常: