探索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
自动登录
在本篇博客中我们将完成一个小例子:利用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