package com.mossle.guest.web; import java.util.Date; import javax.annotation.Resource; import com.mossle.core.auth.CustomPasswordEncoder; import com.mossle.core.id.IdGenerator; import com.mossle.core.spring.MessageHelper; import com.mossle.user.persistence.domain.AccountCredential; import com.mossle.user.persistence.domain.AccountInfo; import com.mossle.user.persistence.manager.AccountCredentialManager; import com.mossle.user.persistence.manager.AccountInfoManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.mvc.support.RedirectAttributes; @Controller @RequestMapping("guest") public class RegisterController { private static Logger logger = LoggerFactory .getLogger(RegisterController.class); private MessageHelper messageHelper; private AccountInfoManager accountInfoManager; private AccountCredentialManager accountCredentialManager; private CustomPasswordEncoder customPasswordEncoder; private IdGenerator idGenerator; @RequestMapping("register-view") public String registerView() { return "guest/register-view"; } @RequestMapping("register-save") public String registerSave( @ModelAttribute AccountInfo accountInfo, @RequestParam(value = "password", required = false) String password, @RequestParam(value = "confirmPassword", required = false) String confirmPassword, RedirectAttributes redirectAttributes) throws Exception { // 先进行校验 if (password != null) { if (!password.equals(confirmPassword)) { messageHelper.addFlashMessage(redirectAttributes, "user.user.input.passwordnotequals", "两次输入密码不符"); // TODO: 还要填充schema return "guest/register-view"; } } // 再进行数据复制 AccountInfo dest = accountInfo; dest.setId(idGenerator.generateId()); dest.setCreateTime(new Date()); accountInfoManager.insert(dest); if (dest.getCode() == null) { dest.setCode(Long.toString(dest.getId())); accountInfoManager.save(dest); } if (password != null) { String hql = "from AccountCredential where accountInfo=? and catalog='default'"; AccountCredential accountCredential = accountCredentialManager .findUnique(hql, accountInfo); if (accountCredential == null) { accountCredential = new AccountCredential(); accountCredential.setAccountInfo(accountInfo); accountCredential.setType("normal"); accountCredential.setCatalog("default"); } if (customPasswordEncoder != null) { accountCredential.setPassword(customPasswordEncoder .encode(password)); } else { accountCredential.setPassword(password); } accountCredentialManager.save(accountCredential); } accountInfo.setStatus("disabled"); accountInfo.setType("register"); accountInfoManager.save(accountInfo); return "redirect:/guest/register-success.do"; } @RequestMapping("register-success") public String registerSuccess() { return "guest/register-success"; } @RequestMapping("register-checkUsername") @ResponseBody public boolean checkUsername(@RequestParam("username") String username, @RequestParam(value = "id", required = false) Long id) throws Exception { String hql = "from AccountInfo where username=?"; Object[] params = { username }; if (id != null) { hql = "from AccountInfo where username=? and id<>?"; params = new Object[] { username, id }; } boolean result = accountInfoManager.findUnique(hql, params) == null; return result; } // ~ ====================================================================== @Resource public void setMessageHelper(MessageHelper messageHelper) { this.messageHelper = messageHelper; } @Resource public void setAccountInfoManager(AccountInfoManager accountInfoManager) { this.accountInfoManager = accountInfoManager; } @Resource public void setAccountCredentialManager( AccountCredentialManager accountCredentialManager) { this.accountCredentialManager = accountCredentialManager; } @Resource public void setCustomPasswordEncoder( CustomPasswordEncoder customPasswordEncoder) { this.customPasswordEncoder = customPasswordEncoder; } @Resource public void setIdGenerator(IdGenerator idGenerator) { this.idGenerator = idGenerator; } }