好记性不如烂笔头34-利用java过滤器实现用户自动登录
2015-02-06 14:45
561 查看
在很多的网站中,都有自动登录的功能,实现自动登录的方法有很多种方式,利用J***A过滤器也能够实现用户的自动登录。
1、 实现用户自动登录的基本原理
在用户登陆成功后,发送一个cookie给客户端,cookie的值为用户名和md5加密后的密码。
编写一个AutoLoginFilter,这个filter检查用户是否带有指定名称的cookie来,如果有,则查询cookie的用户名和密码是否和数据库匹配,匹配则向session中存入user对象(即用户登陆标记),以实现程序完成自动登陆。
在下面的示例中,为了简单处理,都是用明码进行简单处理。在实际项目中千万不要依样画葫芦。
2、 用J***A过滤器实现用户自动登录的源代码-登录模块
3、 用J***A过滤器实现用户自动登录的源代码-过滤器模块
4、 用J***A过滤器实现用户自动登录的源代码-用户模块
5、 修改web.xml
7、 最终运行结果
输入url测试地址:http://localhost:8080/webStudy/login?name=ffm&pass=pass&logintime=100
和http://localhost:8080/webStudy/login 进行测试。
测试结果:
登录成功
1、 实现用户自动登录的基本原理
在用户登陆成功后,发送一个cookie给客户端,cookie的值为用户名和md5加密后的密码。
编写一个AutoLoginFilter,这个filter检查用户是否带有指定名称的cookie来,如果有,则查询cookie的用户名和密码是否和数据库匹配,匹配则向session中存入user对象(即用户登陆标记),以实现程序完成自动登陆。
在下面的示例中,为了简单处理,都是用明码进行简单处理。在实际项目中千万不要依样画葫芦。
2、 用J***A过滤器实现用户自动登录的源代码-登录模块
[code]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; /** * 通过过滤器实现自动登录-登录模块 * @author 范芳铭 */ public class LoginServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("name"); String password = request.getParameter("pass"); response.setCharacterEncoding("UTF-8");//设置将字符以"UTF-8"编码输出到客户端浏览器 //通过设置响应头控制浏览器以UTF-8的编码显示数据,浏览器显示乱码的解决方法 response.setHeader("content-type", "text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); User user = null; user = (User)request.getSession().getAttribute("user"); if (user == null){ //如果不能从过滤器中获取user对象,那么看是否用户输入了登录必要的信息 user = new User(); user.setName(username); user.setPass(password); } //验证,简化处理 if((user.getName() == null) || (user.getPass() == null)){ out.print("用户名或密码不对!!"); return; }else{ //有内容就当成功 request.getSession().setAttribute("user", user); //发送自动登陆cookie给客户端浏览器进行存储 sendAutoLoginCookie(request,response,user); out.print("登录成功"); //request.getRequestDispatcher("/index.jsp").forward(request, response); } } //发送自动登录cookie给客户端浏览器 private void sendAutoLoginCookie(HttpServletRequest request, HttpServletResponse response, User user) { if (request.getParameter("logintime")!=null) { int logintime = Integer.parseInt(request.getParameter("logintime")); //创建cookie,cookie的名字是autologin,值是用户登录的用户名和密码,用.进行分割 Cookie cookie = new Cookie("autologin",user.getName() + "." + user.getPass()); //设置cookie的有效期 cookie.setMaxAge(logintime); //设置cookie的有效路径 cookie.setPath(request.getContextPath()); //将cookie写入到客户端浏览器 response.addCookie(cookie); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
3、 用J***A过滤器实现用户自动登录的源代码-过滤器模块
[code]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; /** * 通过过滤器实现自动登录-过滤器 * @author 范芳铭 */ public class AutoLoginFilter implements Filter { public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) resp; // 如果已经登录了,就直接chain.doFilter(request, response)放行 if (request.getSession().getAttribute("user") != null) { chain.doFilter(request, response); System.out.println("用户名称和密码匹配,自动登录成功"); return; } // 1.得到用户带过来的authlogin的cookie String value = null; Cookie cookies[] = request.getCookies(); for (int i = 0; cookies != null && i < cookies.length; i++) { if (cookies[i].getName().equals("autologin")) { value = cookies[i].getValue(); } } // 2.得到 cookie中的用户名和密码 if (value != null) { String username = value.split("\\.")[0]; String password = value.split("\\.")[1]; // 3.根据用户名和密码获取用户信息,这里简单处理 User user = new User(); String name = user.getName(); String pass = user.getPass(); // 4.检查用户带过来的md5的密码和数据库中的密码是否匹配,这里直接用明码示例 if (username.equals(name) & password.equals(pass)) { request.getSession().setAttribute("user", user); System.out.println("用户名称和密码匹配"); } else { System.out.println("用户名称和密码不对,不能自动登录。"); } } chain.doFilter(request, response); } public void destroy() { } public void init(FilterConfig filterConfig) throws ServletException { } }
4、 用J***A过滤器实现用户自动登录的源代码-用户模块
[code]package com.autoLogin; /** * 通过过滤器实现自动登录-简单用户模块-仅用于示例 * @author 范芳铭 */ public class User { private String name; private String pass; public User(){ this.name = "ffm"; this.pass = "pass"; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPass() { return pass; } public void setPass(String pass) { this.pass = pass; } }
5、 修改web.xml
[code] <filter> <filter-name>easyFilter</filter-name> <filter-class>com.autoLogin.AutoLoginFilter</filter-class> </filter> <filter-mapping> <filter-name>easyFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <servlet-name>login</servlet-name> <servlet-class>com.autoLogin.LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>login</servlet-name> <url-pattern>/login</url-pattern> </servlet-mapping> 6、 用J***A过滤器实现用户自动登录的源代码-移除cookie模块 有的业务不需要使用cookie,需要进行移除,可以用下面的类进行处理: `````` package com.autoLogin; 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 CancelAutoLoginServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 移除存储在session中的user request.getSession().removeAttribute("user"); // 移除自动登录的cookie removeAutoLoginCookie(request, response); // 注销用户后跳转到登录页面 request.getRequestDispatcher("/login.jsp").forward(request, response); } /** * @Description: 删除自动登录cookie, * JavaWeb中删除cookie的方式就是新创建一个cookie,新创建的cookie与要删除的cookie同名, * 设置新创建的cookie的cookie的有效期设置为0,有效路径与要删除的cookie的有效路径相同 */ private void removeAutoLoginCookie(HttpServletRequest request, HttpServletResponse response) { // 创建一个名字为autologin的cookie Cookie cookie = new Cookie("autologin", ""); // 将cookie的有效期设置为0,命令浏览器删除该cookie cookie.setMaxAge(0); // 设置要删除的cookie的path cookie.setPath(request.getContextPath()); response.addCookie(cookie); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
7、 最终运行结果
输入url测试地址:http://localhost:8080/webStudy/login?name=ffm&pass=pass&logintime=100
和http://localhost:8080/webStudy/login 进行测试。
测试结果:
登录成功
相关文章推荐
- 记性不如烂笔头33-利用java过滤器实现压缩响应正文内容
- 利用cookie实现用户自动登录的代码
- asp.net利用cookie保存用户密码实现自动登录的方法
- android基础-利用SharedPreferences实现用户记住密码和自动登录
- JavaEE之--------利用过滤器实现用户自动登录,安全登录,取消自动登录黑用户禁止登录
- 利用Filter实现用户自动登录
- 好记性不如烂笔头36-利用java过滤器禁止浏览器缓存
- JavaEE之--------利用过滤器实现用户自动登录,安全登录,取消自动登录黑用户禁止登录
- 好记性不如烂笔头35-利用java过滤器缓存WEB静态资源
- asp.net利用cookie保存用户密码实现自动登录的方法
- 对用户自动登录实现的代码
- 利用Httpwatch实现自动登录
- jsp页面中用户登录的实现(利用javascript实现非空判断等……)
- Android 利用httpclient进行网络通信,实现用户登录的方法
- (转)在ASP.NET 中实现单点登录(利用Cache, 将用户信息保存在服务器缓存中)
- 利用Servlet和jsp实现客户端与服务器端的用户登录信息验证
- HttpWebRequest 发送 POST实现自动用户登录
- 用户自动登录的jsp实现
- 在PHP中利用LDAP通过活动目录(Active Directory)实现域用户登录验证的办法
- 使用vs2010的Coded UI Test实现数据驱动的用户自动登录测试