【过滤器】(3)过滤器的应用案例:网站自动登录技术(Cookie记忆)
来源:互联网 发布:ttip数据什么意思 编辑:程序博客网 时间:2024/06/05 13:21
一、实现用户自动登录的解决方案
1、设置一个全站拦截的过虑器。
2、当选择自动登录时候利用Cookie记录当前用户的登录信息。
3、此过虑器中,读取用户带过来的Cookie信息,然后从中读取用户的用户名和密码,自动帮助用户登录。
4、即可实现自动登录功能。
5、如图:
第一次登录,输入用户信息:
登录成功后显示用户状态:
二、项目分层
1、index.jsp:
<%@ 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> <title>演示自动登录</title> </head> <body> <h2>演示自动登录技术</h2> <c:if test="${!empty sessionScope.pass}"> <font color="green">${pass}</font><br/> <!-- 一定要将上一次的错误信息清除掉 --> <c:remove var="pass" scope="session"/> </c:if> <c:if test="${!empty sessionScope.error}"> <font color="red">${error}</font><br/> <!-- 一定要将上一次的错误信息清除掉 --> <c:remove var="error" scope="session"/> </c:if> <c:if test="${empty sessionScope.name}" var="boo"> <form action="<c:url value='/LoginServlet'/>" method="post"> 姓名:<input type="text" name="name"/><br/> 密码:<input type="password" name="pwd"/><br/> 自动登录: <input type="radio" name="time" value="0"/>不自动登录 <input type="radio" name="time" value="1"/>1天 <input type="radio" name="time" value="7" checked="checked"/>7天<br/> <input type="submit" value="登录"/> </form> </c:if> <c:if test="${!boo}"> 欢迎你,${sessionScope.name} <br/> <a href="<c:url value='/CancelAutoLoginServlet'/>">取消自动登录</a><br/> <a href="<c:url value='/jsps/safe/1.jsp'/>">会员页面1</a><br/> </c:if> </body></html>
2、LoginServlet.java:
package cn.hncu.servlets;import java.io.IOException;import java.net.URLEncoder;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 { doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); String name = request.getParameter("name"); String pwd = request.getParameter("pwd"); String time = request.getParameter("time"); //按理应该访问数据库的,但是这里模拟一下 if(name!=null && name.trim().startsWith("hncu")){ if(pwd!=null && pwd.length()>4){ /**为了实现自动登录成功,这里使用Cookie技术,利用Cookie技术存储当前用户登录的信息, * 当用户下一次点击自动登录的时候可以从Cookie中读取出信息,然后自动登录。 */ //实现自动登录功能---利用Cookie存储信息 name = URLEncoder.encode(name, "utf-8"); pwd = URLEncoder.encode(pwd, "utf-8"); Cookie c = new Cookie("autoLogin", name+"@#"+pwd); c.setPath(request.getContextPath());//设置Cookie存储的位置 c.setMaxAge(24*60*60*Integer.parseInt(time)); response.addCookie(c); request.getSession().setAttribute("name", name); request.getSession().setAttribute("pass", "登录成功!"); }else{ request.getSession().setAttribute("error", "密码错误!"); } }else{ request.getSession().setAttribute("error", "用户名不存在!"); } response.sendRedirect(request.getContextPath()+"/index.jsp"); }}
3、自动登录过滤器:AutoLoginFilter.java:
package cn.hncu.filters;import java.io.IOException;import java.net.URLDecoder;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;/*** * * 自动登录功能: * * (1)浏览器每次登录的时候都是从Cookie中读取Cookie信息 (2)将读取出来的Cookie信息,设置到登录的地方 * */public class AutoLoginFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // 读取Cookie中的信息 HttpServletRequest req = (HttpServletRequest) request; if (req.getSession().getAttribute("name") == null) { Cookie[] cs = req.getCookies(); if (cs != null) { for (Cookie c : cs) { if (c.getName().equals("autoLogin")) { System.out.println("找到自动登录的cookie"); String val = c.getValue(); String[] strs = val.split("@#"); String name = URLDecoder.decode(strs[0], "utf-8"); String pwd = URLDecoder.decode(strs[1], "utf-8"); if (name != null && name.startsWith("hncu") && pwd != null && pwd.length() > 5) { req.getSession().setAttribute("name", name); break; } } } } } chain.doFilter(request, response); } @Override public void destroy() { }}
4、取消自动登录:CancelAutoLoginServlet.java:
package cn.hncu.servlets;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;/*** * 取消自动登功能 * @author user * */public class CancelAutoLoginServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ///删除autoLoginCookie Cookie c = new Cookie("autoLogin", ""); c.setPath(request.getContextPath()); c.setMaxAge(0);//过期时间为0即是删除 response.addCookie(c); response.sendRedirect(request.getContextPath()+"/index.jsp"); }}
5、黑名单:
package cn.hncu.filters;import java.io.IOException;import java.util.HashSet;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;public class BlacklistFilter implements Filter{ HashSet<String> blackSet = new HashSet<String>(); @Override public void init(FilterConfig filterConfig) throws ServletException { //按理应该在这里从数据库中读取出来,加入到blackSet集合中 blackSet.add("192.168.120.1"); //blackSet.add("127.0.0.1"); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { //获取客户端的IP地址 String ip = request.getRemoteAddr(); if(blackSet.contains(ip)){ response.setContentType("text/html;charset=utf-8"); response.getWriter().println("你已经被列入黑名单了"); }else{ chain.doFilter(request, response); } } @Override public void destroy() { }}
阅读全文
0 0
- 【过滤器】(3)过滤器的应用案例:网站自动登录技术(Cookie记忆)
- 【过滤器】(2)过滤器的应用案例:网站安全登录技术
- 过滤器案例-----自动登录
- Servlet过滤器案例-自动登录
- 【过滤器】(5)过滤器的应用案例:全站压缩技术(包装模式)
- 【过滤器】(4)过滤器的应用案例:留言板敏感词过滤技术(包装模式)
- 过滤器Filter的案例2——自动登录
- 使用cookie+过滤器实现自动登录
- JavaWeb之过滤器实现自动登录案例
- 过滤器的应用之自动登录--filter(三)
- 过滤器Filter--登录案例
- Filter过滤器+cookie实现自动登录和安全登录
- 过滤器应用案例分析
- 过滤器实现自动登录
- 过滤器实现自动登录
- struts2结合过滤器和cookie实现自动登录
- struts2结合过滤器和cookie实现自动登录
- struts2结合过滤器和cookie实现自动登录
- Android 强引用,弱引用,软引用,虚引用讲解
- 最好的python视频教程谁有?
- 淘淘项目2
- 多重背包模板
- Warning: Could not connect to Nexus.解决方案
- 【过滤器】(3)过滤器的应用案例:网站自动登录技术(Cookie记忆)
- LeetCode25
- 9. Palindrome Number
- 未找到入口文件,或者文件读取失败,请检查后重新编译。 pages/contact/contact 出现脚本错误或者未正确调用 Page()。
- 详解SID之终结篇
- js中的!=, ==, !== 和===的区别
- jmeter 关联
- FastDFS文件系统
- QuickTime文件格式规范