一、访问注册页面
1.点击顶部区域链接,打开注册页面
①建立一个Controller类LoginController
@Controller
public class LoginController {
@RequestMapping(path = "/register",method = RequestMethod.GET)
public String getRegisterPage(){
return "/site/register";
}
}
②配置好对应的register.html文件
二、提交注册数据
1.通过表单提交数据
①导入一个判断字符串、集合是否为空值的包Commons Lang
②在注册的过程中需要发激活邮件,邮件里边需要带激活链接,链接到我们社区网站,此链接在开发测试与上线的时候是不一样的,因此需要将其做成可配的,写在配置文件中。
#ServerProperities
server.servlet.context-path=/community
....
#Community
community.path.domain=http://localhost:8080
③在util包下新建一个工具类CommunityUtil,封装生成随机字符串和密码加密功能
public class CommunityUtil {
//生成随机字符串
public static String generateUUID(){
return UUID.randomUUID().toString().replaceAll("-","");
}
//MD5加密
public static String md5(String key){
if(StringUtils.isBlank(key)){
return null;
}
return DigestUtils.md5DigestAsHex(key.getBytes());
}
}
2.服务端验证账号、邮箱是否已注册 3.服务端发送激活邮件
④编写注册业务,在UserService类下写一个register方法
public Map<String,Object> register(User user){
Map<String,Object> map=new HashMap<>();
//空值处理
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;
}
//注册用户
user.setSalt(CommunityUtil.generateUUID().substring(0,5));
user.setPassword(CommunityUtil.md5(user.getPassword()+user.getSalt()));
user.setType(0);
user.setStatus(0);
user.setActivationCode(CommunityUtil.generateUUID());
user.setHeaderUrl(String.format("http://images.nowvoder.com/head/%dt.png",new Random().nextInt(1000)));
user.setCreateTime(new Date());
userMapper.insertUser(user);
//激活邮件
Context context=new Context();
context.setVariable("email",user.getEmail());
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);
return map;
}
⑤上一步调用insertUser()之后,发送激活邮件之前需要配置相关的activation.html文件,再调用模板引擎templateEngine生成动态网页,最终通过mailClient发送邮件
服务层完成后,开始编写控制器Controller在此完成前后端的交互逻辑
⑥在LonginController类下定义一个register方法来处理浏览器的注册请求,并配置相关的.html文件
@RequestMapping(path = "/register",method = RequestMethod.POST)
public String register(Model model, User user){
Map<String,Object> map = userService.register(user);
if(map == null || map.isEmpty()){
model.addAttribute("msg","注册成功,我们已向您的邮箱发送了一封激活邮件,请尽快激活!");
model.addAttribute("target","/index");
return "/site/operate-result";
}else{
model.addAttribute("usernameMsg",map.get("usernameMsg"));
model.addAttribute("passwordMsg",map.get("passwordMsg"));
model.addAttribute("emailMsg",map.get("emailMsg"));
return "/site/register";
}
}
三、激活注册账号
①在util包下新建一个接口,对各种激活状态常量进行声明
public interface CommunityConstant {
/**
* 激活成功
*/
int ACTIVATION_SUCCESS = 0;
/**
* 重复激活
*/
int ACTIVATION_REPEAT = 1;
/**
* 激活失败
*/
int ACTIVATION_FAILURE = 2;
}
②在业务层新建一个方法封装激活的逻辑,改变用户的激活状态
public int activation(int userId, String code){
User user=userMapper.selectById(userId);
if(user.getStatus() == 1){
return ACTIVATION_REPEAT;
}else if(user.getActivationCode().equals(code)){
userMapper.updateStatus(userId,1);
return ACTIVATION_SUCCESS;
} else{
return ACTIVATION_FAILURE;
}
}
③在Controller层编写代码,处理激活请求,并配置相关的.html文件
@RequestMapping(path = "/activation/{userId}/{code}", method = RequestMethod.GET)
public String activation(Model model, @PathVariable("userId") int userId, @PathVariable("code") String code){
int result=userService.activation(userId, code);
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");
}
return "/site/register";
}