天天看點

java 自動功能實作_Java Web中簡單實作自動登陸功能。

Java 對自動登陸功能的簡單實作,僅用到了servlet和一個filter。第一次寫博文,如有不足的地方,敬請指正,謝謝。

登陸界面

登陸頁面

使用者名:

密 碼:

儲存時間

一 周

一個月

填寫完使用者名和密碼後選擇儲存時間。這裡就沒有設定不儲存選項,預設儲存時間是一周。

LoginBiz類,負責校驗使用者輸入的使用者名和密碼是否正确。

package com.autologin;

public class LoginBiz {

static boolean isValid(String name,String passwd){

if(name.equals("admin")&&passwd.equals("1234")){

return true;

}else{

return false;

}

}

}本類為LoginAction提供服務,相當于Biz層。

LoginAction類,負責頁面跳轉。

package com.autologin;

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;

public class LoginAction extends HttpServlet {

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

String name=request.getParameter("name");

String passwd=request.getParameter("passwd");

String savetimeString=request.getParameter("savetime");

if(new LoginBiz().isValid(name, passwd)){

int savetime=Integer.parseInt(savetimeString)*24*3600;

Cookie loginInfo=new Cookie("loginInfo",name+","+passwd);

loginInfo.setMaxAge(savetime);

response.addCookie(loginInfo);

response.sendRedirect("/TestWeb/success.jsp");

}else{

response.sendRedirect("/TestWeb/error.jsp");

}

}

}使用者第一次登陸時會調用此servlet來驗證使用者資訊和設定cookie。根據登陸時的設定的時間計算出秒數,然後把儲存有使用者名和密碼的Cookie(loginInfo)add到用戶端。為了友善使用者名和密碼設定在了一個cookie中,用","隔開。(真正項目中,當然要給密碼做加密處理。)

如果第一次成功登陸,再次請求login.jsp時即可直接跳轉到success頁面,無需再次輸入使用者名和密碼,這裡就用到了下面這個Filter。

CheckFilter類

package com.autologin;

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 CheckFilter implements Filter {

public void destroy() {

}

public void doFilter(ServletRequest arg0, ServletResponse arg1,

FilterChain arg2) throws IOException, ServletException {

HttpServletRequest request=(HttpServletRequest)arg0;

HttpServletResponse response=(HttpServletResponse)arg1;

Cookie[] cookies=request.getCookies();

String name = "";

String passwd = "";

if(cookies!=null){

for(Cookie coo:cookies){

if(coo.getName().equals("loginInfo")){

String[] info=coo.getValue().split(",");

name=info[0];

passwd=info[1];

}

}

}

//如果在cookie中得到儲存的使用者名和密碼,驗證正确後,直接轉到success頁

if(new LoginBiz().isValid(name, passwd)){

response.sendRedirect("/TestWeb/success.jsp");

}else{

arg2.doFilter(request, response);

}

}

public void init(FilterConfig arg0) throws ServletException {

}

}當使用者請求login.jsp頁面時,首先會通過此Filter,這時會嘗試從請求資訊的Cookie中得到使用者名和密碼,如果是第一次登陸沒有設定過Cookie,那麼會把登陸請求交給LoginAction處理。如果之前成功登陸過,就已儲存有Cookie,擷取到正确的使用者名和密碼并驗證成功(安全起見,這裡再次驗證)後直接跳轉到success頁面,此時就不經過LoginAction了。

配置檔案如下:

LoginAction

com.autologin.LoginAction

CheckFilter

com.autologin.CheckFilter

LoginAction

/LoginAction

CheckFilter

/login.jsp

第一次登陸成功後,chrome儲存的Cookie資訊

java 自動功能實作_Java Web中簡單實作自動登陸功能。