用户自动登录网站

1.目标:用户登录后,再次登录无需输入用户名和密码

2.思路:将用户的信息保存为cookie

           每次用户访问网站,通过filter拦截所有请求,在filter中读取所有的cookie,如果找到了保存登录信息的cookie,那么在cookie中读取登录信息,然后直接跳过登录页面,如果没有找到,那么切换到登录页面

3.具体代码

    3.1登录界面

  

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html">
</head>

<body>
	<p>主页
	<p>
		<c:choose>
			<c:when test="${empty sessionScope.name}">
				<form name="x" action="<c:url value='/LoginServlet' />"
					method="post">
					name:<input type="text" name="name" /> 
					auto: 
					<input type="radio"name="auto" value="-1" checked="checked">不自动登陆
					<input type="radio" name="auto" value="1">1天 
					<input type="radio" name="auto" value="7">7天 <input type="submit" value="提交">
				</form>
			</c:when>
			<c:otherwise>
                  欢迎你:${name }<br>
				<a href="<c:url value='/LoginServlet'/>">退出</a>
			</c:otherwise>
		</c:choose>
</body>
</html>

   3.2filter过滤器

  

package s051301;
import java.io.IOException;

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;


public class Filter implements javax.servlet.Filter{
	  private String encoding;
	public void init(FilterConfig con) throws ServletException {
	}


	public void doFilter(ServletRequest req, ServletResponse res,
			FilterChain chain) throws IOException, ServletException {
		System.err.println("dofilter service()");
		req.setCharacterEncoding("UTF-8");
		res.setContentType("text/html;charset=" + "UTF-8");
		
		HttpServletRequest request=(HttpServletRequest)req;
		Cookie[] cs=request.getCookies();
		
		if(cs!=null)
		{
			for(Cookie c:cs)
			{
				if(c.getName().equals("log")); //cookie怎么存的就怎么取
				{
				String value=c.getValue();  //存放cookie中的值,就是用户的名称
				request.getSession().setAttribute("name", value);
				break;
				}
			}
		}

		
		chain.doFilter(req, res);   
		
	}
	
	public void destroy() {
		
	}

}

  3.3Servlet

package s051301;

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 {

		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=UTF-8");
       
		String name=request.getParameter("name");
		String auto=request.getParameter("auto");
		System.err.println(name);
		System.err.println(auto);

		if(!auto.equals("-1"))
		{
		    request.getSession().setAttribute("name", name);
			int day=Integer.parseInt(auto);
			int seconds=60*60*24*day;
			
			//声明cookie
			Cookie c=new Cookie("log",name);
			c.setMaxAge(seconds);
			c.setPath(request.getContextPath());
			
			response.addCookie(c);
		}



		//重定向到主页
		response.sendRedirect(request.getContextPath()+"/index.jsp");


	}

}

    3.4web.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">


	<filter>
		<filter-name>filter</filter-name>
		<filter-class>s051301.Filter</filter-class>
	</filter>

	<filter-mapping>
		<filter-name>filter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>


	<servlet>
		<servlet-name>LoginServlet</servlet-name>
		<servlet-class>s051301.LoginServlet</servlet-class>
	</servlet>

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

</web-app>

猜你喜欢

转载自542255641.iteye.com/blog/2210800