利用Filter实现用户自动登录

本案例实现的功能是:

在用户登录时,勾选下次自动登录复选框,下次用户就可以不用登录直接进入index.jsp主界面

实现代码如下


<%@ page language= "java" import= "java.util.*"pageEncoding ="UTF-8" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://" +request.getServerName()+ ":"+request.getServerPort()+path+ "/" ;
%>

<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
< html>
  <head >
    <base href= "<%= basePath%> " >
   
    <title >My JSP 'index.jsp' starting page</ title>
     <meta http-equiv= "pragma" content ="no-cache" >
     <meta http-equiv= "cache-control" content ="no-cache" >
     <meta http-equiv= "expires" content= "0" >   
     <meta http-equiv= "keywords" content ="keyword1,keyword2,keyword3" >
     <meta http-equiv= "description" content= "This  is my page">
     <!--
    <link rel="stylesheet " type="text/css"href="styles.css">
    -->
  </head >
 
  <body >
    欢迎你${user.username } <br >
  </body >
</ html>


//login.jsp

<%@ page language= "java" contentType ="text/html;  charset=UTF-8"
    pageEncoding= "UTF-8" %>
<! DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd" >
< html>
< head>
< meta http-equiv ="Content-Type" content ="text/html; charset=UTF-8" >
< title> 登录 </title >
</ head>
< body>
     <form action =" ${pageContext.request.contextPath }/servlet/loginServlet" method= "post">
      用户名: < input type= "text" name ="username" >< br>
    密码: < input type= "password" name = "pwd">< br >
     <input type= "checkbox" name= "autologin" >自动登录 < br>
     <input type= "submit" name= "login" value = "登录">
     </form >
</ body>
</ html>


 
 
//web.xml

<? xml version= "1.0" encoding = "UTF-8"?>
< web-app xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"xmlns= "http://java.sun.com/xml/ns/javaee"xsi:schemaLocation ="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id= "WebApp_ID" version = "3.0">
  <display-name >day17_autoLogin </ display-name>
  <filter >
     <filter-name >AutonLoginFilter </ filter-name>
      < filter-class >com.wency.servlet.AutonLoginFilter </ filter-class>
  </filter >
  <filter-mapping >
     <filter-name >AutonLoginFilter </ filter-name>
     <url-pattern >/* </ url-pattern>
  </filter-mapping >
 
  <servlet >
    <servlet-name >LoginServlet </ servlet-name>
    < servlet-class> com.wency.servlet.LoginServlet </servlet-class >
  </servlet >

  <servlet-mapping >
    <servlet-name >LoginServlet </ servlet-name>
    < url-pattern> /servlet/loginServlet </ url-pattern>
  </servlet-mapping >

</ web-app>


 
 
//LoginServlet
package com.wency.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.wency.entity.User;
import com.wency.service.ServiceImpl;

public class LoginServlet extends HttpServlet {

     /**
     * Constructor of the object.
     */
     public LoginServlet() {
          super();
     }

     
     public void doGet(HttpServletRequest request, HttpServletResponse response)
               throws ServletException, IOException {

          response.setContentType("text/html;charset=UTF-8");
          request.setCharacterEncoding("UTF-8");
          String username = request.getParameter("username");
          String pwd = request.getParameter("pwd");
          String autologin = request.getParameter("autologin");
          ServiceImpl serviceImpl=new ServiceImpl();
          User user=serviceImpl.findUserByName(username);
          
          if(user!=null){//如果用户不为空
               //如果用户的密码输入正确
               if(pwd.equals(user.getPwd())){
                    Cookie cookie=new Cookie("user",user.getUsername()+"&"+user.getPwd());
                    cookie.setPath("/");
                    if(autologin!=null){
                         cookie.setMaxAge(60*60*24*7);//保存cookie值7天
                    }else{
                         cookie.setMaxAge(0);//如果不自动登录则将cookie值清除
                    }
                    
                    //将user加入到session中去
                    
                    //将cookie加入到response中
                    response.addCookie(cookie);
                    request.getRequestDispatcher("/index.jsp")
                    .forward(request, response);
               }
          }else {
               response.getWriter().print("用户名不存在!");
               request.getRequestDispatcher("/login.jsp")
               .forward(request, response);
          }
     }

     
     public void doPost(HttpServletRequest request, HttpServletResponse response)
               throws ServletException, IOException {

          doGet(request, response);
     }

}


 
 
//AutologinFilter

package com.wency.servlet;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.wency.entity.User;
import com.wency.service.ServiceImpl;

public class AutonLoginFilter implements Filter{

     @Override
     public void destroy() {
         // TODO Auto-generated method stub
        
    }

     @Override
     public void doFilter(ServletRequest req , ServletResponse res ,
            FilterChain chain) throws IOException, ServletException {
         // TODO Auto-generated method stub
        HttpServletRequest request =(HttpServletRequest) req ;
        HttpServletResponse response =(HttpServletResponse) res ;
         //获得cookies
        Cookie[] cookies = request.getCookies();
        String name= "" ;
        String pwd ="" ;
         ServiceImpl serviceImpl =newServiceImpl();
         User user= null ;
        
        
        String path= request.getContextPath();
        String uri= request.getRequestURI();
         path= uri.substring( path.length());
        
        
        
         if (!("/login.jsp" .equals(path )||"/servlet/loginServlet" .equals(uri ))){
             user=(User) request .getSession().getAttribute("user" );
        }
             if (cookies != null){
                 //如果用户还没登陆,则将user的信息保存到session中,否则直接放行
                System. out .println("path:  "+ path);
                 if (user == null){
                    
                     //处理获得的cookie
                     for (int i = 0; i < cookies .length ; i ++) {
                         if ("user" .equals(cookies [i ].getName())){
                            String value =cookies [i ].getValue();
                            String[] strings =value .split("&" );
                             name= strings[0];
                             pwd= strings[1];
                             user =serviceImpl .findUserByName( name);
                             //将user加入到session中
                                 request.getSession().setAttribute( "user" , user );
                                System. out .println("username:  "+ user.getUsername());
                            
                        }
                    }
                }
            }
        

         //放行
         chain.doFilter( req, res);
        
        
        
    }

     @Override
     public void init(FilterConfig filterConfig )throws ServletException {
         // TODO Auto-generated method stub
        
    }

}


 
 

发布了38 篇原创文章 · 获赞 6 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/coderlady/article/details/59112713