登录jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
${msg }
<form action="${pageContext.request.contextPath }/autoLoginServlet" method="post">
用户名:<input type="text" name="username"/><br>
密码:<input type="password" name="password"/><br>
<input type="checkbox" name="autologin">自动登录<br>
<input type="submit" value="登录">
</form>
</body>
</html>
servlet
@WebServlet("/autoLoginServlet")
public class AutoLoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取前端数据
String username = request.getParameter("username");
String password = request.getParameter("password");
//对密码进行处理
password=MD5Util.md5(password);
//调用业务逻辑
UserService us = new UserServiceImpl();
User user=us.login(username,password);
//分发转向
if(user!=null){
//自动登录
String autologin = request.getParameter("autologin");
Cookie cookie = new Cookie("user",user.getUsername()+"&"+user.getPassword());
cookie.setPath("/");
if(autologin!=null){ //选中自动登录
cookie.setMaxAge(1024*1024*7); //设置cookie存7天
}else{
cookie.setMaxAge(0); //销毁
}
//回写
response.addCookie(cookie);
request.setAttribute("user", user); //登录成功
request.getRequestDispatcher("/home.jsp").forward(request, response);
//response.sendRedirect("/home.jsp"); ??????
}else
{request.setAttribute("msg", "密码或用户名错误");
request.getRequestDispatcher("/login.jsp").forward(request, response);
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
filter
public class AutoLoginFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
//过滤处理了 ? ??????
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
//强转
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse res = (HttpServletResponse) response;
//功能 处理业务
String username="";
String password="";
Cookie[] cookies = req.getCookies();
for(int i=0;cookies!=null&i<cookies.length;i++){
if("user".equals(cookies[i].getName()) ){ //cookie name&123456
String value = cookies[i].getValue();
String[] values = value.split("&"); //把取出来的name密码分割 第一个是用户名 第二个是密码
username = values[0]; //用户名
password = values[1]; //密码
}
}
//登录
UserService us = new UserServiceImpl();
User user = us.login(username, password);
//用户名密码
if(user!=null){
req.getSession().setAttribute("user",user);
}else{//前面有值,不允许后面重定向处理
res.sendRedirect(req.getContextPath()+"/login.jsp");
}
//放行
chain.doFilter(request, response);
}
filter 配置xml
<filter>
<filter-name>AutoLoginFilter</filter-name>
<filter-class>com.bj.web.filter.AutoLoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>AutoLoginFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
MD5加密
public class MD5Util {
/**
* 使用md5的算法进行加密
*/
public static String md5(String plainText) {
byte[] secretBytes = null;
try {
secretBytes = MessageDigest.getInstance("md5").digest(
plainText.getBytes());
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException("没有md5这个算法!");
}
String md5code = new BigInteger(1, secretBytes).toString(16);
for (int i = 0; i < 32 - md5code.length(); i++) {
md5code = "0" + md5code;
}
return md5code;
}
}