cookie為用戶登陸服務器后,服務器寫在客戶端的文件。
我們在登錄126郵箱時,如果勾選上兩周內自動登錄,兩周內不用輸入用戶名和密碼郵箱會自動登錄,這是因為第一次登錄時服務器將用戶名和密碼寫入cookie中,并返回給客戶端。
下次登錄時Http協議會帶著用戶的cookie去服務器驗證,因為服務器已經存儲用戶的信息,所以會自動登錄。
登錄代碼:
package com.dr.course;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String username=request.getParameter("username");
String password=request.getParameter("password");
String savetime=request.getParameter("saveTime");
if(CheckLogin.login(username, password)){
if(null!=savetime){
int saveTime=Integer.parseInt(savetime);//這里接受的表單值為天來計算的
int seconds=saveTime*24*60*60;
Cookie cookie = new Cookie("user", username+"=="+password);
cookie.setMaxAge(seconds);
response.addCookie(cookie);
}
request.setAttribute("username",username);
request.getRequestDispatcher("/main126.jsp").forward(request,response);
}else{
request.getRequestDispatcher("/failure.jsp").forward(request,response);
}
}
}
驗證代碼:
package com.dr.course;
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;
public class IndexFilter implements Filter {
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
System.out.println("every request pass here haha");
HttpServletRequest request = (HttpServletRequest) arg0;
HttpServletResponse response = (HttpServletResponse) arg1;
Cookie[] cookies = request.getCookies();
String[] cooks = null;
String username = null;
String password = null;
if (cookies != null) {
for (Cookie coo : cookies) {
String aa = coo.getValue();
cooks = aa.split("==");
if (cooks.length == 2) {
username = cooks[0];
password = cooks[1];
}
}
}
System.out.println("cookie username | " + username);
System.out.println("cookie password | " + password);
if (CheckLogin.login(username, password)) {
System.err.println("check successfully cookie data ");
request.getSession().setAttribute("username",username);
request.getRequestDispatcher("/main126.jsp").forward(request, response);
}else{
arg2.doFilter(request,response );
}
}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
package com.dr.course;
public class CheckLogin {
public static boolean login(String username, String password) {
if ("admin".equals(username) && "123456".equals(password)) {
return true;
} else {
return false;
}
}
}
web.xml中配置如下:
- <filter>
<filter-name>loginFilter</filter-name>
<filter-class>com.dr.course.IndexFilter</filter-class>
</filter>
- <filter-mapping>
<filter-name>loginFilter</filter-name>
<url-pattern>/main126.jsp</url-pattern>
</filter-mapping>
- <servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.dr.course.LoginServlet</servlet-class>
</servlet>
- <servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login.do</url-pattern>
</servlet-mapping>
將目錄加入到Tomcat中,開啟Tomcat,打開瀏覽器輸入網址:http://127.0.0.1:8080/AutoLogin/login.do進行測試。