目录
上一节介绍了基本的登录功能,这一节我们来完善一下登录功能的其他特性。
1.用Properties文件连接数据库;
具体参考:Properties文件连接数据库
2.用MD5对数据库密码进行加密;
具体参考:MD5加密
加密之后,我们在数据库中将密码给成加密后的形式,而且再对密码进行取值的时候,即连接数据库查询的时候要修改一下。
我们在数据访问层Dao里面,对密码的设置进行修改。
package com.java.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import com.java.model.User;
import com.java.util.MD5Util;
public class UserDao {
public User login(Connection con,User user) throws Exception{
User resultUser=null;
String sql="select * from t_user where userName=? and passWord=?";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setString(1, user.getUserName());
pstmt.setString(2, MD5Util.EncoderPwdByMd5(user.getPassWord()));
ResultSet rs=pstmt.executeQuery();
if(rs.next()){
resultUser=new User();
resultUser.setUserId(rs.getInt("userId"));
resultUser.setUserName(rs.getString("userName"));
resultUser.setPassWord(rs.getString("passWord"));
}
return resultUser;
}
}
注意这里进行数据库查询的时候是对密码进行加密了的。
3.记录Cookie和取Cookie操作;
我们在LoginServlet里面写一个记录用户信息的方法:
/**
* 记录用户信息的方法
* @param userName
* @param passWord
* @param response
*/
private void rememberMe(String userName,String passWord,HttpServletResponse response){
//用Cookie类,构造方法是采用键值对的形式
Cookie user=new Cookie("user",userName+"-"+passWord);
//设置cookie的有效期为一周,默认是1s
user.setMaxAge(1*60*60*24*7);
//用response对象来操作cookie
response.addCookie(user);
}
然后要读取cookies,在login.jsp页面上写读取cookie的代码:
<%
/* 读取cookie,首先这里需要判断,
若是用户第一次登陆,则需要记录并读取cookie,
若用户登陆错误重新返回到登录界面,这里前台会自动显示错误信息,不需要再读取了 */
//前台没有传过来user,则说明用户是第一次登陆,这就需要记录并读取cookie
if(request.getAttribute("user")==null){
String userName=null;
String passWord=null;
//从浏览器获取所有的cookies
Cookie[] cookies=request.getCookies();
for(int i=0;cookies!=null && i<cookies.length;i++){
//如果读取到了前台传来的key(用getName()方法来获取cookie的key),也就是user,那么就遍历出来
if(cookies[i].getName().equals("user")){
//通过cookie的键key来获取cookie的值value
userName=cookies[i].getValue().split("-")[0];
passWord=cookies[i].getValue().split("-")[1];
}
}
if(userName==null){
userName="";
}
if(passWord==null){
passWord="";
}
//EL表达式中采用pageContext范围,优先级最高
pageContext.setAttribute("user", new User(userName,passWord));
}
%>
最后回到登录界面,会发现已经自动记住密码了!