您的位置:首页 > 其它

后台(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

自动登录

在本篇博客中我们将完成一个小例子:利用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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: