分析清楚逻辑结构
cookie + session + filter 技术运用
防止伪造cookie
需要改进的地方: cookie加密技术
package com.gyarmy.demo4;
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 com.gyarmy.demo3.UserBean;
import com.gyarmy.demo3.UserService;
public class AutoLoginFilter implements Filter {
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
//自动登录控制
//1 是否登录
HttpServletRequest request = (HttpServletRequest)req;
HttpServletResponse response = (HttpServletResponse)resp;
//已经登录
if(request.getSession().getAttribute("loginUser")!=null)
{
//自动登录
chain.doFilter(request, response);
}else{
//没有登录,查看Cookie
Cookie[] cookies = request.getCookies();
Cookie targetCookie = getTargetCookie(cookies,"autologin");
if(targetCookie == null)
{
chain.doFilter(request, response); //继续执行
}else
{
//验证用户是否能登录
System.out.println(targetCookie.getValue());
//字符串截取
String loginString = targetCookie.getValue();
String[] strAttr = loginString.split("#gyarmy#");
if(strAttr.length!=2)
{
chain.doFilter(request, response); //继续执行
}else
{
UserBean autoUserLogin = new UserBean();
autoUserLogin.setUsername(strAttr[0]);
autoUserLogin.setPassword(strAttr[1]);
//判断是否为伪造
UserService us = new UserService();
UserBean userLogin = us.login(autoUserLogin);
if(userLogin!=null)
{
request.getSession().setAttribute("loginUser", userLogin);
}
chain.doFilter(request, response); //继续执行
}
}
}
}
private Cookie getTargetCookie(Cookie[] cookies, String string) {
// TODO Auto-generated method stub
//获取目标cookie
if(cookies == null)
{
return null;
}
for (Cookie cookie : cookies) {
if(cookie.getName().equalsIgnoreCase("autologin"))
{
//找到目标cookie
return cookie;
}
}
return null;
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
0则评论给“使用过滤器实现自动登录”