1 登录页面
2 添加验证码工具类
- 替换验证码图片
https://www.iconfont.cn/search/index?searchType=icon&q=%E9%AA%8C%E8%AF%81%E7%A0%81
2 登录表单提交设计实现和用户实体设计
2.1 表单提交
- 用户实体类
2.2 用户service,dao,mapper设计
2.3 登录后主页设计
2.4 登录拦截器设计和菜单管理控制器设计
package com.tzb.ssm.interceptor.admin;
import net.sf.json.JSONObject;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;
/**
* @Description 登录拦截器
* @Author tzb
* @Date 2021/5/8 21:28
* @Version 1.0
**/
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception {
final String requestURI = request.getRequestURI();
final Object admin = request.getSession().getAttribute("admin");
if (admin == null) {
// 表示未登录或者登录失效
System.out.println("链接:" + requestURI + " 进入拦截器");
final String header = request.getHeader("X-Requested-With");
//判断是否是ajax请求,ajax请求不能重定向
if("XMLHttpRequest".equals(header)){
//是ajax请求
Map<String, String> ret = new HashMap<>();
ret.put("type", "error");
ret.put("msg", "登录会话超时或者还未登录,请重新登录");
response.getWriter().write(JSONObject.fromObject(ret).toString());
return false;
}
//表示是普通链接跳转,直接重定向到登录页面
response.sendRedirect(request.getServletContext().getContextPath() + "/system/login");
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 {
}
}
2.5 菜单管理控制器
2.6 菜单管理页面设计
2.7 菜单添加功能设计
2.8 菜单列表查询功能设计实现
2.9 菜单列表查询和添加功能完善