A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hejinzhong 中级黑马   /  2014-9-11 08:34  /  890 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 hejinzhong 于 2014-9-11 08:40 编辑

  1. //过滤器功能
  2. public class UserLoginFilter implements Filter {

  3.         @Override
  4.         public void init(FilterConfig filterConfig) throws ServletException {
  5.                 System.out.println("过滤启动");
  6.         }

  7.         @Override
  8.         public void doFilter(ServletRequest req, ServletResponse res,
  9.                         FilterChain chain) throws IOException, ServletException {
  10.                
  11.                 //将参数转换为和协议有关
  12.                 HttpServletRequest request = (HttpServletRequest) req;
  13.                 HttpServletResponse response = (HttpServletResponse) res;

  14.                 //(1)如果请求登录界面,则放行
  15.                 if("/HE06/index.jsp".equals(request.getServletContext())){
  16.                         chain.doFilter(request, response);
  17.                         return;
  18.                 }
  19.                 //(2)如果已登录,则放行
  20.                 if(request.getSession().getAttribute("user") != null){
  21.                         chain.doFilter(request, response);
  22.                         return;
  23.                 }
  24.                
  25.                 //下面是未登录,则根据携带cookie与否,和是否正确来判断
  26.                
  27.                 Cookie tempCookie = null;
  28.                
  29.                 //判断是否有cookie
  30.                 Cookie[] cookie = request.getCookies();
  31.                 if(cookie != null){
  32.                         for (Cookie ck : cookie) {
  33.                                 if("autoinfo".equals(ck.getName())){
  34.                                         tempCookie = ck;
  35.                                 }
  36.                         }
  37.                 }
  38.                
  39.                 /*cookie是否正确
  40.                 if(tempCookie != null){
  41.                         User user = new User(tempCookie.getValue().split("#")[0],
  42.                            tempCookie.getValue().split("#")[1]);
  43.                         user = new UserService().find(user);
  44.                         
  45.                         //不正确,则删除cookie信息
  46.                         if(user == null){
  47.                                 tempCookie.setMaxAge(0);
  48.                                 tempCookie.setPath("/");
  49.                                 response.addCookie(tempCookie);
  50.                                 chain.doFilter(request, response);
  51.                                 return;
  52.                         }
  53.                         
  54.                         //如果信息正确,则记录登录,并放行
  55.                         request.getSession().setAttribute("user", user);
  56.                 }
  57.                 chain.doFilter(request, response);
  58.                 */
  59.                
  60.                 if(tempCookie == null){
  61.                         chain.doFilter(request, response);
  62.                         return;
  63.                 }
  64.                
  65.                 String[] userStr = tempCookie.getValue().split("#");
  66.                 User user = new User(userStr[0], userStr[1]);
  67.                 user = new UserService().find(user);
  68.                
  69.                 if(user == null){
  70.                         tempCookie.setMaxAge(0);
  71.                         tempCookie.setPath("/");
  72.                         response.addCookie(tempCookie);
  73.                         chain.doFilter(request, response);
  74.                         return;
  75.                 }
  76.                 request.getSession().setAttribute("user", user);//记录登录
  77.                 chain.doFilter(request, response);
  78.         }

  79.         @Override
  80.         public void destroy() {
  81.                 System.out.println("过滤销毁");
  82.         }
  83. }
  84. ------------------------------------------------------------------------
  85. //登录处理功能
  86. public class UserLoginServlet extends HttpServlet {

  87.         public void doGet(HttpServletRequest request, HttpServletResponse response)
  88.                         throws ServletException, IOException {
  89.                 doPost(request, response);
  90.         }
  91.         public void doPost(HttpServletRequest request, HttpServletResponse response)
  92.                         throws ServletException, IOException {
  93.                
  94.                 /**
  95.                  * 从请求中获取相应参数,封装后,传递给服务器查找
  96.                  * 如果可以查找到,即登录成功
  97.                  * 然后判断用户是否勾选了自动登录
  98.                  */
  99.                
  100.                 //封装并查询
  101.                 User user = new User(request.getParameter("name"),request.getParameter("password"));
  102.                 user = new UserService().find(user);
  103.                
  104.                 //根据查询结果进行操作
  105.                 if(user != null){
  106.                         //设置cookie信息
  107.                         if(request.getParameter("auto") != null){        
  108.                                 Cookie cookie = new Cookie("autoinfo",user.getName()+"#"+user.getPassword());
  109.                                 cookie.setMaxAge(60*60);
  110.                                 cookie.setPath("/");
  111.                                 response.addCookie(cookie);
  112.                         }
  113.                         
  114.                         //记录登录状态,并重定向到成功界面
  115.                         request.getSession().setAttribute("user", user);
  116.                         response.sendRedirect(request.getContextPath()+"/suc.jsp");
  117.                 }else{
  118.                         //不成功则给提示
  119.                         request.setAttribute("msg", "用户名和密码不一致");
  120.                         request.getRequestDispatcher("/index.jsp").forward(request, response);
  121.                 }
  122.         }
  123. }

复制代码

评分

参与人数 1技术分 +1 收起 理由
格子、 + 1

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马