代碼實作
register.jsp
<%@page contentType="text/html; UTF-8" pageEncoding="utf-8" isELIgnored="false" %>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>使用者注冊</h1>
<form action="${pageContext.request.contextPath}/user/register" method="post">
使用者名:<input type="text" name="username"><br>
密碼:<input type="text" name="password"> <br>
<input type="submit" value="立即注冊">
</form>
</body>
</html>
UserController:
/**
* 使用者注冊
* @param user
* @return
*/
@RequestMapping("register")
public String register(User user){
try {
userService.register(user);
return "redirect:/login.jsp";
} catch (Exception e) {
e.printStackTrace();
return "redirect:/register.jsp";
}
}
userServiceImpl:
@Autowired
private UserDao userDao;
@Override
public void register(User user) {
// 處理業務,調用Dao
// 1,生成随機鹽
String salt = saltUtils.getSalt(8);
System.out.println(salt);
// 2,将随機鹽儲存到資料
user.setSalt(salt);
// 3,對銘文的密碼進行MD5+SALT+HASH
Md5Hash md5Hash = new Md5Hash(user.getPassword(),salt,1024);
System.out.println(md5Hash.toHex());
// 4,将生成的密碼儲存到資料庫
user.setPassword(md5Hash.toHex());
// 5,調用dao,儲存到資料庫中
userDao.save(user);
}
saltUtils:生成随機鹽的工具類
package shiro.demo.Untils;
import java.util.Random;
public class saltUtils {
/**
* 生成salt的靜态方法
* @param n
* @return
*/
public static String getSalt(int n) {
char[] chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789@#$%^&*()".toCharArray();
StringBuilder sb= new StringBuilder();
for (int i = 0; i < n; i++) {
char aChar = chars[new Random().nextInt(chars.length)];
sb.append(aChar);
}
return sb.toString();
}
public static void main(String[] args) {
String salt = getSalt(8);
System.out.println(salt);
}
}
userDao
userDao.xml
<insert id="save" parameterType="User">
insert into t_user values(#{id},#{username},#{password},#{salt})
</insert>
效果
前端頁面:

資料庫儲存的資料:
這裡的密碼是經過md5+salt+hash一系列操作形成的。