一、Servlet
package autologin.servlet.login;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
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 javax.servlet.http.HttpSession;
import org.apache.tomcat.util.codec.binary.Base64;
import autologin.domain.Admin;
public class LoginServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String oper=request.getParameter("oper");
if("pre".equals(oper)){
Cookie autoLoginCookie = getCookie(request);
if(autoLoginCookie!=null){
String value=autoLoginCookie.getValue();
if(!"".equals(value)){
String[] values=value.split(":");
if(values.length==2){
request.setAttribute("auto", 0);
request.setAttribute("name", values[0]);
request.setAttribute("pass", values[1]);
}else if(values.length==3){
request.setAttribute("name", values[0]);
request.setAttribute("pass", values[1]);
request.setAttribute("auto", values[2]);
}
}
}
request.getRequestDispatcher("./login.jsp").forward(request, response);
}else if("login".equals(oper)){
String name=request.getParameter("name");
String pass=request.getParameter("pass");
String[] rpass=request.getParameterValues("rpass");
String[] alogin=request.getParameterValues("alogin");
if("zsf".equals(name)&&"123".equals(pass)){
Admin admin=new Admin(name, pass);
//存储到session中去
request.getSession().setAttribute("admin", admin);
loginCookie(request, response, name, pass, rpass, alogin);
request.getRequestDispatcher("./index.jsp").forward(request, response);
}else{
loginCookie(request, response, name, pass, rpass, alogin);
//登录失败,重定向
response.sendRedirect("./login.do?oper=pre");
}
}else if("delete".equals(oper)){
HttpSession session=request.getSession();
session.removeAttribute("admin");
request.getRequestDispatcher("./index.jsp").forward(request, response);
}
}
private Cookie getCookie(HttpServletRequest request) {
Cookie[] cookies=request.getCookies();
Cookie autoLoginCookie=null;
if(cookies!=null&&cookies.length>0){
for(Cookie cookie:cookies){
String cookieName=cookie.getName();
if("autologin".equals(cookieName)){
autoLoginCookie=cookie;
}
}
}
return autoLoginCookie;
}
private void loginCookie(HttpServletRequest request,
HttpServletResponse response, String name, String pass,
String[] rpass, String[] alogin) {
String value="";
if(alogin!=null){
//自动登录操作
value=name+":"+md5(pass)+":"+1;
}else if(rpass!=null){
//记住密码操作
value=name+":"+md5(pass);
}
Cookie autoLoginCookie = getCookie(request);
if(autoLoginCookie==null){
autoLoginCookie=new Cookie("autologin", value);
}else{
//重新设置值
autoLoginCookie.setValue(value);
}
//加入到响应中
response.addCookie(autoLoginCookie);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
public String md5(String input){
try {
MessageDigest md=MessageDigest.getInstance("md5");
byte buffer[]=md.digest(input.getBytes());
byte[] temp=Base64.encodeBase64(buffer);
System.out.println(new String(temp));
return new String(temp);
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
二、Filter
package autologin.filter;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
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 javax.servlet.http.HttpSession;
import org.apache.tomcat.util.codec.binary.Base64;
import autologin.domain.Admin;
public class AutoLoginFilter implements Filter{
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request=(HttpServletRequest) req;
HttpServletResponse response=(HttpServletResponse) res;
String oper=request.getParameter("oper");
//判断是否是登录的准备操作,如果不是直接放行
if(!"pre".equals(oper)){
chain.doFilter(request, response);
return;
}
//1.获取session中的用户,如果有就不需要登录,如果没有直接放行
HttpSession session=request.getSession();
Admin admin=(Admin)session.getAttribute("admin");
if(admin!=null){
request.getRequestDispatcher("./index.jsp").forward(request, response);
return;
}
//2.获取Cookie中的auto标志对象,对象为空,则继续执行
Cookie autoLoginCookie=getCookie(request, "autologin");
if(autoLoginCookie==null){
chain.doFilter(request, response);
return;
}
//3.autologin name:pass:auto拆分autologin标志,返回长度如果为2,否则继续 执行
String value=autoLoginCookie.getValue();
if(value==null||"".equals(value)){
chain.doFilter(request, response);
return;
}
//4.autologin的长度等于3证明是自动登录操作
String[] values=value.split(":");
if(values!=null&&values.length==2){
chain.doFilter(request, response);
return;
}
if(values.length==3){
String name=values[0];
String pass=values[1];
//5.根据name查找这个用户的密码,pass findById Admin getObjectByName(String name)
Admin getAdmin=new Admin("zsf","123");
//根据用户名称查询得到的密码
String gpass=getAdmin.getPass();
//6判断查询出的pass与autologin标志的pass是否一样,如果不一样,就登录界面
if(md5(gpass).equals(pass)){
//7.如果一样,证明有这个用户,自动登录成功,存储到session中
session.setAttribute("admin", getAdmin);
request.getRequestDispatcher("./index.jsp").forward(request, response);
return;
}
}
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
private Cookie getCookie(HttpServletRequest request,String name) {
Cookie[] cookies=request.getCookies();
Cookie autoLoginCookie=null;
if(cookies!=null&&cookies.length>0){
for(Cookie cookie:cookies){
String cookieName=cookie.getName();
if(name.equals(cookieName)){
autoLoginCookie=cookie;
}
}
}
return autoLoginCookie;
}
//md5加密
public String md5(String input){
try {
//消息摘要加密类对象
MessageDigest md=MessageDigest.getInstance("md5");
//加密算法
byte buffer[]=md.digest(input.getBytes());
//安装base64进一步处理
byte[] temp=Base64.encodeBase64(buffer);
System.out.println(new String(temp));
return new String(temp);
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
三、页面
(1)index.jsp
首页
欢迎${admin.name }登录
(2)login.jsp
My JSP 'login.jsp' starting pagewindow.οnlοad=function(){
var aloginDom=document.getElementById("alogin");
var rpassDom=document.getElementById("rpass");
//自动登录事件
aloginDom.οnclick=function(){
if(this.checked){ //判断自己是否为真
if(!rpassDom.checked){//记住密码是否为真,如果为假就让它设置为真
rpassDom.checked=true;
}
}
};
//记住密码事件
rpassDom.οnclick=function(){
if(aloginDom.checked){//首先判断自动登录是否为真
this.checked=true;//它永远为真
}
};
};
用户登录
用户名 | |||
密码 | |||
记住密码 自动登录 记住密码 自动登录 记住密码 自动登录 | |||
|
四、web.xml
autologin
AutoLoginFilter
autologin.filter.AutoLoginFilter
AutoLoginFilter
/login.do
LoginServlet
autologin.servlet.login.LoginServlet
LoginServlet
/login.do
index.html