仿牛客的bbs (二)

385 阅读2分钟

学习记录
生成随机字符串

// 生成随机字符串
public static String generateUUID() {
    return UUID.randomUUID().toString().replaceAll("-", "");
}

md5加密(注册时使用)

// MD5加密
// hello -> abc123def456
// hello + 3e4a8 -> abc123def456abc
public static String md5(String key) {
    if (StringUtils.isBlank(key)) {
        return null;
    }
    return DigestUtils.md5DigestAsHex(key.getBytes());
}

service对注册的处理

// 空值处理
if (user == null) {
    throw new IllegalArgumentException("参数不能为空!");
}
if (StringUtils.isBlank(user.getUsername())) {
    map.put("usernameMsg", "账号不能为空!");
    return map;
}
if (StringUtils.isBlank(user.getPassword())) {
    map.put("passwordMsg", "密码不能为空!");
    return map;
}
if (StringUtils.isBlank(user.getEmail())) {
    map.put("emailMsg", "邮箱不能为空!");
    return map;
}
// 验证账号
// 查看真实的是否存在,不为空即存在
User u = userMapper.selectByName(user.getUsername());
if (u != null) {
    map.put("usernameMsg", "该账号已存在!");
    return map;
}
// 同理,验证邮箱
// 验证邮箱
u = userMapper.selectByEmail(user.getEmail());
if (u != null) {
    map.put("emailMsg", "该邮箱已被注册!");
    return map;
}

service里注册用户、激活邮箱

// 注册用户
user.setSalt(CommunityUtil.generateUUID().substring(0, 5));
// md5加密
user.setPassword(CommunityUtil.md5(user.getPassword() + user.getSalt()));
user.setType(0);
user.setStatus(0);
// 激活码
user.setActivationCode(CommunityUtil.generateUUID());
// 随机头像
user.setHeaderUrl(String.format("http://images.nowcoder.com/head/%dt.png", new Random().nextInt(1000)));
user.setCreateTime(new Date());
userMapper.insertUser(user);

@Value("${community.path.domain}")
private String domain;

@Value("${server.servlet.context-path}")
private String contextPath;

// 激活邮件
Context context = new Context();
context.setVariable("email", user.getEmail());
// http://localhost:8080/community/activation/101/code
String url = domain + contextPath + "/activation/" + user.getId() + "/" + user.getActivationCode();
context.setVariable("url", url);
String content = templateEngine.process("/mail/activation", context);
mailClient.sendMail(user.getEmail(), "激活账号", content);

在jsp里输入--->在controller里设置值,生成和检查验证码,检验密码等

if (result == ACTIVATION_SUCCESS) {
    model.addAttribute("msg", "激活成功,您的账号已经可以正常使用了!");
    model.addAttribute("target", "/login");
} else if (result == ACTIVATION_REPEAT) {
    model.addAttribute("msg", "无效操作,该账号已经激活过了!");
    model.addAttribute("target", "/index");
} else {
    model.addAttribute("msg", "激活失败,您提供的激活码不正确!");
    model.addAttribute("target", "/index");
}

jsp上面的验证

<input type="text"
      th:class="|form-control ${usernameMsg!=null?'is-invalid':''}|"
      th:value="${user!=null?user.username:''}"
      id="username" name="username" placeholder="请输入您的账号!" required>
<div class="invalid-feedback" th:text="${usernameMsg}">
   该账号已存在!
</div>

<input type="password"
      th:class="|form-control ${passwordMsg!=null?'is-invalid':''}|"
      th:value="${user!=null?user.password:''}"
      id="password" name="password" placeholder="请输入您的密码!" required>
<div class="invalid-feedback" th:text="${passwordMsg}">
   密码长度不能小于8位!
</div>       

<input type="password" class="form-control"
      th:value="${user!=null?user.password:''}"
      id="confirm-password" placeholder="请再次输入密码!" required>
<div class="invalid-feedback">
   两次输入的密码不一致!
</div>
<input type="email"
      th:class="|form-control ${emailMsg!=null?'is-invalid':''}|"
      th:value="${user!=null?user.email:''}"
      id="email" name="email" placeholder="请输入您的邮箱!" required>
<div class="invalid-feedback" th:text="${emailMsg}">
   该邮箱已注册!
</div>

会话管理 Http基本性质:

  • 简单的
  • 可扩展的
  • 无状态,有会话的 Http本质是无状态的,使用cookies可以创建有状态的会话

cookie主要用于以下三个方面

  • 会话状态管理(如用户登录状态,购物车,游戏分数,等)
  • 个性化设置(如自定义设置,主题)
  • 浏览器行为跟踪(如跟踪用户行为等)

cookie是服务器端发到浏览器端,并保存在浏览器端的一小块数据

session是用于在服务端记录信息的
数据放在服务器端安全些,但是也增加了服务器的压力

cookie

// cookie示例
@RequestMapping(path = "/cookie/set", method = RequestMethod.GET)
@ResponseBody
public String setCookie(HttpServletResponse response) {
    // 创建cookie
    Cookie cookie = new Cookie("code", CommunityUtil.generateUUID());
    // 设置cookie生效的范围
    cookie.setPath("/community");
    // 设置cookie的生存时间
    cookie.setMaxAge(60 * 10);
    // 发送cookie
    response.addCookie(cookie);
    return "set cookie";
}
// getCookie
@RequestMapping(path = "/cookie/get", method = RequestMethod.GET)
@ResponseBody
public String getCookie(@CookieValue("code") String code) {
    System.out.println(code);
    return "get cookie";
}

session

// 使用 session的set/getAttribute方法
@RequestMapping(path = "/session/set", method = RequestMethod.GET)
@ResponseBody
public String setSession(HttpSession session) {
    session.setAttribute("id", 1);
    session.setAttribute("name", "Test");
    return "set session";
}

@RequestMapping(path = "/session/get", method = RequestMethod.GET)
@ResponseBody
public String getSession(HttpSession session) {
    System.out.println(session.getAttribute("id"));
    System.out.println(session.getAttribute("name"));
    return "get session";
}