管理员登录
1.定义管理员操作的DAO
- 定义Admin管理员的vo类
需要有get ,set,方法,toString方法
- 定义IAdminDAO接口,只需要登录的操作方法
`public interface IAdminDAO extends IDAO<String, Admin> {
//登录方法
public boolean findLogin(Admin vo) throws Exception;
//更新登录日期
public boolean doUpdatelastdate(String aid) throws Exception;
}`
- 定义AdminDAOImpl继承IAdminDAO接口实现方法
- DAOFactory(通过DAO工厂实例化)
`public static AdminDAOImpl getIAdminDAOInstance() {
return new AdminDAOImpl(); `
2.定义业务层操作
-管理员登录属于后台业务层所以和前台注册,登录分开 保存到 service.back包中
-定义IAdminServiceback接口
` /**
*
* @Title: login
* @Description: TODO(后台管理员登录操作)
* @param: @param vo
* @param: @return
* @param: @throws Exception
* @return: boolean
* @throws 调用 findLogin确定密码和用户名正确 doUpdatelastdate更新登录时间
*/
public boolean login(Admin vo) throws Exception;`
-定义AdminServicebackImpl类实现 IAdminServiceback接口
3.编写AdminLoginServletBack类
-业务实现类
注解设置servlet
@WebServlet(name = "AdminLoginServletBack", urlPatterns = "/pages/AdminLoginServletBack/*")
public class AdminLoginServletBack extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String path = "/pages/errors.jsp";
// 获取地址*的部分转换为字符串
String status = request.getRequestURI().substring(request.getRequestURI().lastIndexOf("/") + 1);
System.out.println(status);
if (status != null) {// 为空直接跳转到错误页面
//如果登录到后台登录页面
if ("login".equals(status)) {
path = this.login(request);
} else if ("logout".equals(status)) {
path = this.logout(request);
}
}
System.err.println("跳转网页" + path);
request.getRequestDispatcher(path).forward(request, response);
}
private String login(HttpServletRequest request) {
String msg = null;
String url = null;
Admin vo = new Admin();
String aid = request.getParameter("aid");
String password = request.getParameter("password");
String code = request.getParameter("code");// 验证码
String rand = (String) request.getSession().getAttribute("rand");
//判断输入的有内容
if (VakidateUtil.VakidateNoEmpty(aid) && VakidateUtil.VakidateNoEmpty(password)
&& VakidateUtil.VakidateNoEmpty(code) && VakidateUtil.VakidateNoEmpty(rand)) {
//判断验证码必须正确
if (VakidateUtil.Vakidatesame(code, rand)) {
vo.setAid(aid);
vo.setPassword(new MD5Code().MD5Encode(password));
try {
//判断数据库内容匹配
if (ServletBackFactory.getIAdminServiceback().login(vo)) {
request.getSession().setAttribute("aid", aid);
request.getSession().setAttribute("lastdate", vo.getLastdate());
msg = "管理员登录成功";
url = "/pages/back/admin/index.jsp";
} else {
msg = "管理员登录失败,请重新登录";
// 该地址不受到过滤器限制
url = "/pages/back/login.jsp";
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
msg = "填写信息错误,请重新登录";
url = "/pages/forward.jsp";
}
} else {
msg = "验证码错误请重新输入";
// 该地址不受到过滤器限制
url = "/pages/back/login.jsp";
}
request.setAttribute("msg", msg);
request.setAttribute("url", url);
return "/pages/forward.jsp";
}
private String logout(HttpServletRequest request) {
request.getSession().invalidate();
request.setAttribute("msg", "管理员注销成功");
request.setAttribute("url", "/pages/back/login.jsp");
return "/pages/forward.jsp";
}
4.建立后台登录页面
-略
5.建立管理员登录过滤器
-只检测管理员后台页面
`@WebFilter(filterName="AdminLoginFilter",urlPatterns="/pages/back/admin/*")
public class AdminLoginFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request2 = (HttpServletRequest) request;// 取得session
HttpSession hs = request2.getSession();
if (hs.getAttribute("aid") != null) {// 没有登陆过
// 放过
chain.doFilter(request, response);
} else {
hs.setAttribute("mid", "你还没有登录,请登录");
hs.setAttribute("photo", "/pages/back/login.jsp");
request.getRequestDispatcher("/pages/forward.jsp").forward(request, response);
}
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
}`