后台(25)——Filter(2)
2017-02-23 23:19
295 查看
探索Android软键盘的疑难杂症
深入探讨Android异步精髓Handler
详解Android主流框架不可或缺的基石
站在源码的肩膀上全解Scroller工作机制
Android多分辨率适配框架(1)— 核心基础
Android多分辨率适配框架(2)— 原理剖析
Android多分辨率适配框架(3)— 使用指南
自定义View系列教程00–推翻自己和过往,重学自定义View
自定义View系列教程01–常用工具介绍
自定义View系列教程02–onMeasure源码详尽分析
自定义View系列教程03–onLayout源码详尽分析
自定义View系列教程04–Draw源码分析及其实践
自定义View系列教程05–示例分析
自定义View系列教程06–详解View的Touch事件处理
自定义View系列教程07–详解ViewGroup分发Touch事件
自定义View系列教程08–滑动冲突的产生及其处理
作者博客地址:http://blog.csdn.net/lfdfhl
请看,本次示例的项目结构
在此,详解项目中的核心代码。
获取表单传递过来的参数,请参见代码第24-25行
从数据库查询用户,请参见代码第28行
生成Cookie并返回给客户端,请参见代码第30-38行
依据是否自动登录设置Cookie的MaxAge,请参见代码第33-37行
将用户User保存到Session中,请参见代码第39行
如果访问的不是登录相关的资源那么就考虑是否自动登录,请参见代码第39-62行
如果用户没有登录过则开始自动登录,请参见代码第40-61行
自动登录成功后将User保存到Session中,请参见代码第59行
在web.xml中配置Servlet和Filter
深入探讨Android异步精髓Handler
详解Android主流框架不可或缺的基石
站在源码的肩膀上全解Scroller工作机制
Android多分辨率适配框架(1)— 核心基础
Android多分辨率适配框架(2)— 原理剖析
Android多分辨率适配框架(3)— 使用指南
自定义View系列教程00–推翻自己和过往,重学自定义View
自定义View系列教程01–常用工具介绍
自定义View系列教程02–onMeasure源码详尽分析
自定义View系列教程03–onLayout源码详尽分析
自定义View系列教程04–Draw源码分析及其实践
自定义View系列教程05–示例分析
自定义View系列教程06–详解View的Touch事件处理
自定义View系列教程07–详解ViewGroup分发Touch事件
自定义View系列教程08–滑动冲突的产生及其处理
版权声明
本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl
自动登录
在本篇博客中我们将完成一个小例子:利用Servlet、Filter、C3P0、MD5、HttpSession、Cookie实现等技术实现自动登录。请看,本次示例的项目结构
在此,详解项目中的核心代码。
/** * 本文作者:谷哥的小弟 * 博客地址:http://blog.csdn.net/lfdfhl */ package cn.com.servlet; 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; import cn.com.bean.User; import cn.com.service.UserService; import cn.com.service.impl.UserServiceImpl; import cn.com.util.MD5Utils; public class LoginServlet extends HttpServlet { private final String MESSAGE="message"; @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username=request.getParameter("username"); String password=request.getParameter("password"); password=MD5Utils.md5(password); UserService userService=new UserServiceImpl(); User user=userService.findUser(username, password); if(user!=null){ String autologin=request.getParameter("autologin"); Cookie cookie=new Cookie("userinfo", user.getUsername()+"&"+user.getPassword()); cookie.setPath("/"); if(autologin==null){ cookie.setMaxAge(0); }else{ cookie.setMaxAge(60*60*24*3); } response.addCookie(cookie); request.getSession().setAttribute("user", user); request.getRequestDispatcher("/home.jsp").forward(request, response); }else{ request.setAttribute(MESSAGE, "用户名或者密码错误,请重新登录"); request.getRequestDispatcher("/login.jsp").forward(request, response); } } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } }
获取表单传递过来的参数,请参见代码第24-25行
从数据库查询用户,请参见代码第28行
生成Cookie并返回给客户端,请参见代码第30-38行
依据是否自动登录设置Cookie的MaxAge,请参见代码第33-37行
将用户User保存到Session中,请参见代码第39行
/** * 本文作者:谷哥的小弟 * 博客地址:http://blog.csdn.net/lfdfhl */ package cn.com.filter; 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; import cn.com.bean.User; import cn.com.service.UserService; import cn.com.service.impl.UserServiceImpl; public class LoginFilter implements Filter{ @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request=(HttpServletRequest) req; HttpServletResponse response=(HttpServletResponse) res; String path = request.getContextPath(); String uri = request.getRequestURI(); path = uri.substring(path.length()); if (!("/login.jsp".equals(path) || "/loginServlet".equals(path))) { User user=(User) request.getSession().getAttribute("user"); if(user==null){ String username=null; String password=null; Cookie[] cookies = request.getCookies(); for(int i=0;cookies!=null&&i<cookies.length;i++){ Cookie cookie=cookies[i]; String name=cookie.getName(); if("userinfo".equals(name)){ String value = cookie.getValue(); String[] strings = value.split("&"); username=strings[0]; password=strings[1]; break; } } UserService userService=new UserServiceImpl(); User u = userService.findUser(username, password); if(u!=null){ request.getSession().setAttribute("user", u); } } } chain.doFilter(request, response); } @Override public void destroy() { } }
如果访问的不是登录相关的资源那么就考虑是否自动登录,请参见代码第39-62行
如果用户没有登录过则开始自动登录,请参见代码第40-61行
自动登录成功后将User保存到Session中,请参见代码第59行
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" 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_2_5.xsd"> <filter> <filter-name>loginFilter</filter-name> <filter-class>cn.com.filter.LoginFilter</filter-class> </filter> <filter-mapping> <filter-name>loginFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <servlet-name>loginServlet</servlet-name> <servlet-class>cn.com.servlet.LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>loginServlet</servlet-name> <url-pattern>/loginServlet</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
在web.xml中配置Servlet和Filter
相关文章推荐
- Shiro框架 filter&realm绑定 多登陆入口,区分前后台
- 学习ThinkPHP3.2.2:video25,后台模板文件的存放位置
- 25 个精美的后台管理界面模板和布局
- 25 个精美的后台管理界面模板和布局
- 我在项目中用了spring的CharacterEncodingFilter这个字符过滤器 但是后台还是乱码?
- 25 个精美的后台管理界面模板和布局
- MVC4.0 利用IActionFilter实现简单的后台操作日志功能
- 前台ajax重写方法搭配后台filter返回status实现ajax请求跳转登录页面
- ASP.NET动态网站开发培训-25.论文管理系统(五、添加后台新增及修改功能)
- Lecture 25: Map, Filter, Reduce
- 后台前台传入编码处理filter(最完善版本)(根据不同请求post/get不同处理)
- spring框架使用Filter配置解决页面与后台之间编码问题
- 购物网站25:FORM----产品----品牌----前台产品----后台产品----产品查询----产品类型
- 后台filter检查Session过期跳转
- 关于前后台编码设置理解和web.xml编码过滤器CharacterEncodingFilter理解马克
- ext grid filter和java后台的整合使用
- 后台(26)——Filter(3)
- java开发过程中从前台传到后台中文乱码《filter》
- 后台(24)——Filter(1)
- 25 个精美的后台管理界面模板和布局