登陆页面jsp
<div class="col-md-5">
<div style="width: 440px; border: 1px solid #E7E7E7; padding: 20px 0 20px 30px; border-radius: 5px; margin-top: 60px; background: #fff;">
会员登录USER LOGIN
<div> div>
div>
div>
编写servlet处理登陆用户登录操作
public class UserHandlerServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public UserHandlerServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String handlerType = request.getParameter("handlerType");
UserService userService = new UserServiceImpl();
switch (handlerType) {
// 注册操作
case "register":
if(!request.getSession().getAttribute("validateValue").equals(request.getParameter("validateValue"))) {
response.sendRedirect(request.getContextPath() + "/register.jsp");
break;
}
String registerUsername = request.getParameter("username");
String registerPassword = request.getParameter("password");
String registerEmail = request.getParameter("email");
String registerName = request.getParameter("name");
String registerSex = request.getParameter("inlineRadioOptions");
String registerBirthday = request.getParameter("date");
SimpleDateFormat formate = new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
try {
date = formate.parse(registerBirthday);
} catch (ParseException e) {
e.printStackTrace();
}
User user = new User(0, registerUsername, registerPassword, registerEmail, registerName, registerSex, date, "未定义");
if(userService.userRegister(user) != 0) {
System.out.println("注册成功");
request.getSession().setAttribute("user", registerUsername);
response.sendRedirect(request.getContextPath() + "/index.jsp");
}else {
System.out.println("注册失败");
response.sendRedirect(request.getContextPath() + "/register.jsp");
}
break;
//登录操作
case "login":
if(!request.getSession().getAttribute("validateValue").equals(request.getParameter("validateValue"))) {
response.sendRedirect(request.getContextPath() + "/register.jsp");
break;
}
String loginUsername = request.getParameter("username");
String loginPassword = request.getParameter("password");
User loginUser = userService.userLogin(loginUsername, loginPassword);
if(loginUser != null) {
//判断是否记住用户名
if("on".equalsIgnoreCase(request.getParameter("jizhu"))) {
Cookie cookie = new Cookie("rememberUser",loginUsername);
cookie.setMaxAge(3600 * 24 * 365);//设置最大失效时间
response.addCookie(cookie);
}
//判断是否勾选了自动登录
if("on".equalsIgnoreCase(request.getParameter("autoLogin"))) {
Cookie cookie = new Cookie("autoLoginUser",loginUsername + "-" + loginPassword);
cookie.setMaxAge(3600 * 24 * 365);//设置最大失效时间
response.addCookie(cookie);
}
request.getSession().setAttribute("loginUser", loginUser);
System.out.println("登陆成功");
response.sendRedirect(request.getContextPath() + "/index.jsp");
}else {
System.out.println("登陆失败");
response.sendRedirect(request.getContextPath() + "/register.jsp");
}
break;
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
创建自定义过滤器
public class AutoLoginFilter implements Filter{
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) arg0;
HttpServletResponse response = (HttpServletResponse) arg1;
//1.查看用户是否登录
User user = (User) request.getSession().getAttribute("loginUser");
//2.如果用户未登录,判断是否是登录操作,如果不是与登陆有关的操作就自动登录
if(user == null) {
if(!"login".equalsIgnoreCase(request.getParameter("handlerType"))) {
//3.查看Cookie中是否有自动登录的cookie
Cookie cookie = CookUtils.getCookieByName("autoLoginUser", request.getCookies());
//4.判断Cookie是否为空,若不为空就登陆
if(cookie != null) {
String autoUser = cookie.getValue();
//5.获取Cookie中保存的用户名和密码 username-password
String userName = autoUser.split("-")[0];
String userPasswd = autoUser.split("-")[1];
//6.登陆用户
User loginUser = new UserServiceImpl().userLogin(userName, userPasswd);
//7.如果登陆成功将用户保存到session中
if(loginUser != null) {
request.getSession().setAttribute("loginUser", loginUser);
}
}
}
}
//放行
arg2.doFilter(request, response);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
}
配置过滤器
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>lgx_projectdisplay-name>
<welcome-file-list>
<welcome-file>index.htmlwelcome-file>
<welcome-file>index.htmwelcome-file>
<welcome-file>index.jspwelcome-file>
<welcome-file>default.htmlwelcome-file>
<welcome-file>default.htmwelcome-file>
<welcome-file>default.jspwelcome-file>
welcome-file-list>
<filter>
<filter-name>EncodingFilterfilter-name>
<filter-class>com.fjut.filter.EncodingFilterfilter-class>
filter>
<filter-mapping>
<filter-name>EncodingFilterfilter-name>
<url-pattern>/*url-pattern>
filter-mapping>
<filter>
<filter-name>AutoLoginFilterfilter-name>
<filter-class>com.fjut.filter.AutoLoginFilterfilter-class>
filter>
<filter-mapping>
<filter-name>AutoLoginFilterfilter-name>
<url-pattern>/*url-pattern>
filter-mapping>
<servlet>
<description>description>
<servlet-name>UserHandlerServletservlet-name>
<servlet-class>com.fjut.servlet.UserHandlerServletservlet-class>
servlet>
<servlet-mapping>
<servlet-name>UserHandlerServletservlet-name>
<url-pattern>/UserHandlerServleturl-pattern>
servlet-mapping>
web-app>
import javax.servlet.http.Cookie;
public class CookUtils {
/**
* 通过名称在cookie数组获取指定的cookie
* @param name cookie名称
* @param cookies cookie数组
* @return
*/
public static Cookie getCookieByName(String name, Cookie[] cookies) {
if(cookies!=null){
for (Cookie c : cookies) {
//通过名称获取
if(name.equals(c.getName())){
//返回
return c;
}
}
}
return null;
}
}
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5Utils {
/**
* 使用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);// 16进制数字
// 如果生成数字未满32位,需要前面补0
for (int i = 0; i < 32 - md5code.length(); i++) {
md5code = "0" + md5code;
}
return md5code;
}
}