登录及个人中心模块
登录功能的实现:用户在页面输入账号于密码,在控制层获取用户输入的账号与密码,由用户输入的账号来获取该用户对象(封装在业务层<由持久层来实现>),在业务层的方法,会比较数据库中密码和用户传进来的密码。
持久层:登录功能的实现要用到员工模块的功能,但是一般而言,项目的登录模块要应该独立于数据管理模块。
@Repository("selfDao") public interface SelfDao { public Staff selectByAccount(String account); }
持久层的实现:
<?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.4//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="per.lc.sms.dao.SelfDao"> <select id="selectByAccount" resultMap="per.lc.sms.dao.StaffDao.resultMap"> //引自staffDao中的resultMap select * from staff where account=#{account} </select> </mapper>
业务层接口及实现:
public interface SelfService {
public Staff login(String account,String password);
public void changeWord(Staff staff);
}
实现:
@Service("selfService")
public class SelfServiceImp implements SelfService {
@Autowired
private SelfDao selfDao;
@Autowired
private StaffDao staffDao;
public Staff login(String account, String password) {
Staff staff=selfDao.selectByAccount(account);
if (staff==null){
return null;
}
if (staff.getPassword().equals(password)){
return staff;
}
return null;
}
public void changeWord(Staff staff) {
staffDao.update(staff);
}
控制层;
@Controller("selfController") public class selfController { @Autowired private SelfService selfService; public void toLogin(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.getRequestDispatcher("login.jsp").forward(request,response); } public void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String account=request.getParameter("account"); String password=request.getParameter("password"); Staff staff=selfService.login(account,password); if (staff!=null){ HttpSession session=request.getSession(); session.setAttribute("staff",staff); response.sendRedirect("main.do"); //主页面 }else{ response.sendRedirect("toLogin.do"); } }
// /logout.do
public void logout(HttpServletRequest request, HttpServletResponse response) throws IOException { request.getSession().setAttribute("staff",null); response.sendRedirect("toLogin.do"); } // /main.do public void main(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { request.getRequestDispatcher("index.jsp").forward(request,response); }
// /self/info.do
public void info(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("../info.jsp").forward(request,response);
}
// /self/toChangePassword.do
public void toChangePassword(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("../change_password.jsp").forward(request,response);
}
// //self/changePassword.do
public void changePassword(HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException {
String password=request.getParameter("password");
String password1=request.getParameter("password1");
Staff staff=(Staff)request.getSession().getAttribute("staff");
if (!password.equals(staff.getPassword())){
response.sendRedirect("toChangePassword.do");
}else {
staff.setPassword(password1);
selfService.changeWord(staff);
// response.sendRedirect("../logout.do");
//整个窗体跳转,而不是显示在index.jsp页面的右下角
response.getWriter().print("<script type=\"text/javascript\">parent.location.href=\"../logout.do\"</script>"); //头一次见这样的代码
}
}
为了防止用户不登录,直接借助url来访问路径,需要一个登录过滤器。
public class LoginFilter implements Filter { @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest request=(HttpServletRequest)servletRequest; HttpServletResponse response=(HttpServletResponse)servletResponse; String path=request.getServletPath(); if (path.toLowerCase().indexOf("login")!=-1){ filterChain.doFilter(request,response); }else{ Object obj=request.getSession().getAttribute("staff"); if (null!=obj){ filterChain.doFilter(request,response); }else{ response.sendRedirect(request.getContextPath()+"/toLogin.do"); //以绝对路径来保证能够正确跳到登录页面 } } }
配置文件web.xml
<filter> <filter-name>LoginFilter</filter-name> <filter-class>per.lc.sms.global.LoginFilter</filter-class> </filter> <filter-mapping> <filter-name>LoginFilter</filter-name> //头一次碰见一个过滤器设置两个url-pattern <url-pattern>*.jsp</url-pattern> </filter-mapping> <filter-mapping> <filter-name>LoginFilter</filter-name> <url-pattern>*.do</url-pattern> </filter-mapping>
Personnel management system --第七天
原文:https://www.cnblogs.com/liu-chen/p/11677955.html