自动登录

   

   

   

   

   

自动登陆的代码实现:

demo:

控制层

public class LoginServlet extends HttpServlet {

   

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

   

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

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

//MD5加密

password = MD5Utils.md5(password);

UserService us = new UserService();

User user = us.findUser(username,password);

   

if(user!=null){

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

Cookie cookie = new Cookie("user", user.getUsername()+"&"+user.getPassword());

cookie.setPath("/");

if(autologin!=null){//要把用户信息保存到cookie

cookie.setMaxAge(60*60*24*7);

}else{//要清除cookie对象的数据

cookie.setMaxAge(0);

}

response.addCookie(cookie);//cookie对象保存到客户端

   

request.getSession().setAttribute("user", user);

request.getRequestDispatcher("/home.jsp").forward(request, response);

}else{

request.setAttribute("msg", "用户名或密码错误,请重新登录!");

request.getRequestDispatcher("/login.jsp").forward(request, response);

}

   

}

   

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doGet(request, response);

}

   

}

过滤器

   

public class AutoLoginFilter implements Filter {

   

public void init(FilterConfig filterConfig) throws ServletException {

// TODO Auto-generated method stub

   

}

   

public void doFilter(ServletRequest request, ServletResponse response,

FilterChain chain) throws IOException, ServletException {

// 1、转换两个对象HttpServletRequestHttpServletResponse

HttpServletRequest req = (HttpServletRequest) request;

HttpServletResponse resp = (HttpServletResponse) response;

   

String uri = req.getRequestURI();// /day17_02_autologin/login.jsp

String path = req.getContextPath();// /day17_02_autologin

path = uri.substring(path.length()); // /login.jsp

   

//如果请求的资源不是login.jsp,也不是/servlet/loginServlet,才往下执行

if (!("/login.jsp".equals(path) || "/servlet/loginServlet".equals(path))) {

User user = (User) req.getSession().getAttribute("user");

//如果session得到了user对象,说明已经登录过或自动登录过。

//那么请求下一个资源时就不用执行自动登录了。

//用户没有登录过,我们才执行自动登录

if (user == null) {

System.out.println("aaaaaaaaaaaaaaa");

// 2、处理业务

// 得到cookies数组

Cookie[] cookies = req.getCookies();

String username = "";

String password = "";

// 从数组中找到想要的user对象的信息

for (int i = 0; cookies != null && i < cookies.length; i++) {

if ("user".equals(cookies[i].getName())) {

String value = cookies[i].getValue();// tom&123

String[] values = value.split("&");

username = values[0];

password = values[1];

}

}

   

// 登录操作

UserService us = new UserService();

User u = us.findUser(username, password);

// 如果登录成功,把用户信息存到session

if (u != null) {

req.getSession().setAttribute("user", u);

}

}

}

// 3、放行

chain.doFilter(request, response);

}

   

public void destroy() {

// TODO Auto-generated method stub

   

}

   

}

   

posted @ 2017-07-17 18:26  殷瑜泰  阅读(156)  评论(0编辑  收藏  举报