From f34af437a5d78c79c4eb7d9cac4f830a7c085581 Mon Sep 17 00:00:00 2001 From: fucan1017 Date: Mon, 26 Oct 2020 22:58:35 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B3=A8=E5=86=8C=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/maxkey/util/StringUtils.java | 39 +++++ .../persistence/mapper/UserInfoMapper.java | 2 +- .../maxkey/web/endpoint/LoginEndpoint.java | 50 ++++++ .../resources/messages/message.properties | 5 + .../resources/messages/message_en.properties | 5 + .../messages/message_zh_CN.properties | 5 + .../main/resources/templates/views/login.ftl | 3 + .../templates/views/registration/register.ftl | 152 ++++++++++++------ 8 files changed, 215 insertions(+), 46 deletions(-) diff --git a/maxkey-core/src/main/java/org/maxkey/util/StringUtils.java b/maxkey-core/src/main/java/org/maxkey/util/StringUtils.java index a5ec4030..24fbbbc9 100644 --- a/maxkey-core/src/main/java/org/maxkey/util/StringUtils.java +++ b/maxkey-core/src/main/java/org/maxkey/util/StringUtils.java @@ -24,6 +24,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.regex.Matcher; import java.util.regex.Pattern; public final class StringUtils { @@ -479,4 +480,42 @@ public final class StringUtils { } return null; } + + /** + * 验证是否为正确的邮箱号 + * + * @param email + * @return + */ + public static boolean isValidEmail(String email) { + // 1、\\w+表示@之前至少要输入一个匹配字母或数字或下划线 \\w 单词字符:[a-zA-Z_0-9] + // 2、(\\w+\\.)表示域名. 如新浪邮箱域名是sina.com.cn + // {1,3}表示可以出现一次或两次或者三次. + String reg = "\\w+@(\\w+\\.){1,3}\\w+"; + Pattern pattern = Pattern.compile(reg); + boolean flag = false; + if (email != null) { + Matcher matcher = pattern.matcher(email); + flag = matcher.matches(); + } + return flag; + } + /** + * 验证是否为手机号 + * + * @param mobileNo + * @return + */ + public static boolean isValidMobileNo(String mobileNo) { + // 1、(13[0-9])|(15[02789])|(18[679])|(17[0-9]) 13段 或者15段 18段17段的匹配 + // 2、\\d{8} 整数出现8次 + boolean flag = false; + Pattern p = Pattern.compile("^((13[0-9])|(14[0-9])|(15[0-9])|(16[0-9])|(17[0-9])|(18[0-9])|(19[0-9]))\\d{8}$"); + Matcher match = p.matcher(mobileNo); + if (mobileNo != null) { + flag = match.matches(); + } + return flag; + } + } diff --git a/maxkey-persistence/src/main/java/org/maxkey/persistence/mapper/UserInfoMapper.java b/maxkey-persistence/src/main/java/org/maxkey/persistence/mapper/UserInfoMapper.java index 3791a7c9..93f360f6 100644 --- a/maxkey-persistence/src/main/java/org/maxkey/persistence/mapper/UserInfoMapper.java +++ b/maxkey-persistence/src/main/java/org/maxkey/persistence/mapper/UserInfoMapper.java @@ -60,7 +60,7 @@ public interface UserInfoMapper extends IJpaBaseMapper{ public int updateProfile(UserInfo userInfo); - @Select("SELECT * FROM USERINFO WHERE EMAIL = #{value} OR MOBILE= #{value}") + @Select("SELECT * FROM MXK_USERINFO WHERE EMAIL = #{value} OR MOBILE= #{value}") public UserInfo queryUserInfoByEmailMobile(String emailMobile); } diff --git a/maxkey-web-maxkey/src/main/java/org/maxkey/web/endpoint/LoginEndpoint.java b/maxkey-web-maxkey/src/main/java/org/maxkey/web/endpoint/LoginEndpoint.java index c6fc47ed..27157e66 100644 --- a/maxkey-web-maxkey/src/main/java/org/maxkey/web/endpoint/LoginEndpoint.java +++ b/maxkey-web-maxkey/src/main/java/org/maxkey/web/endpoint/LoginEndpoint.java @@ -31,12 +31,15 @@ import org.maxkey.authn.support.rememberme.AbstractRemeberMeService; import org.maxkey.authn.support.socialsignon.service.SocialSignOnProviderService; import org.maxkey.authn.support.wsfederation.WsFederationConstants; import org.maxkey.configuration.ApplicationConfig; +import org.maxkey.constants.ConstantsOperateMessage; +import org.maxkey.constants.ConstantsStatus; import org.maxkey.crypto.password.opt.AbstractOptAuthn; import org.maxkey.domain.UserInfo; import org.maxkey.persistence.service.UserInfoService; import org.maxkey.util.StringUtils; import org.maxkey.web.WebConstants; import org.maxkey.web.WebContext; +import org.maxkey.web.message.Message; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -222,4 +225,51 @@ public class LoginEndpoint { return "fail"; } + + /** + * view register + * @return + */ + @RequestMapping(value={"/register"}) + public ModelAndView register(HttpServletRequest request,HttpServletResponse response) { + + _logger.debug("LoginController /register."); + ModelAndView modelAndView = new ModelAndView("registration/register"); + Object loginErrorMessage=WebContext.getAttribute(WebConstants.LOGIN_ERROR_SESSION_MESSAGE); + modelAndView.addObject("loginErrorMessage", loginErrorMessage==null?"":loginErrorMessage); + WebContext.removeAttribute(WebConstants.LOGIN_ERROR_SESSION_MESSAGE); + return modelAndView; + } + + @RequestMapping(value={"/registeron"}) + @ResponseBody + public Message registeron(UserInfo userInfo,@RequestParam String emailMobile) throws ServletException, IOException { + if(StringUtils.isNullOrBlank(emailMobile)) { + return new Message(WebContext.getI18nValue("register.emailMobile.error"),"1"); + } + if(StringUtils.isValidEmail(emailMobile)) { + userInfo.setEmail(emailMobile); + } + if(StringUtils.isValidMobileNo(emailMobile)) { + userInfo.setMobile(emailMobile); + } + if(!(StringUtils.isValidEmail(emailMobile)||StringUtils.isValidMobileNo(emailMobile))) { + return new Message(WebContext.getI18nValue("register.emailMobile.error"),"1"); + } + UserInfo temp=userInfoService.queryUserInfoByEmailMobile(emailMobile); + if(temp!=null) { + return new Message(WebContext.getI18nValue("register.emailMobile.exist"),"1"); + } + + temp=userInfoService.loadByUsername(userInfo.getUsername()); + if(temp!=null) { + return new Message(WebContext.getI18nValue("register.user.error"),"1"); + } + userInfo.setStatus(ConstantsStatus.ACTIVE); + if(userInfoService.insert(userInfo)) { + return new Message(WebContext.getI18nValue("login.text.register.success"),"0"); + } + return new Message(WebContext.getI18nValue("login.text.register.error"),"1"); + + } } diff --git a/maxkey-web-maxkey/src/main/resources/messages/message.properties b/maxkey-web-maxkey/src/main/resources/messages/message.properties index 9d0d30b0..050e25c2 100644 --- a/maxkey-web-maxkey/src/main/resources/messages/message.properties +++ b/maxkey-web-maxkey/src/main/resources/messages/message.properties @@ -53,6 +53,11 @@ login.button.login=\u767b\u5f55 login.text.currenttime=\u65f6    \u95f4 login.text.otherlogins=\u5176\u4ed6\u767b\u5f55\u65b9\u5f0f login.text.register=\u7528\u6237\u6ce8\u518c +login.text.register.success=\u6ce8\u518c\u6210\u529f +login.text.register.error=\u6ce8\u518c\u5931\u8d25\u000d\u000a +register.user.error=\u767B\u9646\u8D26\u53F7\u5DF2\u5B58\u5728 +register.emailMobile.error=\u90AE\u7BB1\u6216\u624B\u673A\u683C\u5F0F\u9519\u8BEF +register.emailMobile.exist=\u90AE\u7BB1\u6216\u624B\u673A\u5DF2\u5B58\u5728 login.password.expired=\u5bc6\u7801\u8fc7\u671f login.password.expired.tip=\u5bc6\u7801\u8fc7\u671f\uff0c\u8bf7\u4fee\u6539\u5bc6\u7801 diff --git a/maxkey-web-maxkey/src/main/resources/messages/message_en.properties b/maxkey-web-maxkey/src/main/resources/messages/message_en.properties index 26d34fdf..782c8fa4 100644 --- a/maxkey-web-maxkey/src/main/resources/messages/message_en.properties +++ b/maxkey-web-maxkey/src/main/resources/messages/message_en.properties @@ -53,6 +53,11 @@ login.button.login=Login login.text.currenttime=CurrentTime login.text.otherlogins=OtherLogins login.text.register=Register +login.text.register.success=Register successful +login.text.register.error=Register error +register.user.error=username exist +register.emailMobile.error=email or mobile error +register.emailMobile.exist=email or mobile exist login.password.expired=Password Expired login.password.expired.tip=Password expired, please change password diff --git a/maxkey-web-maxkey/src/main/resources/messages/message_zh_CN.properties b/maxkey-web-maxkey/src/main/resources/messages/message_zh_CN.properties index 9d0d30b0..050e25c2 100644 --- a/maxkey-web-maxkey/src/main/resources/messages/message_zh_CN.properties +++ b/maxkey-web-maxkey/src/main/resources/messages/message_zh_CN.properties @@ -53,6 +53,11 @@ login.button.login=\u767b\u5f55 login.text.currenttime=\u65f6    \u95f4 login.text.otherlogins=\u5176\u4ed6\u767b\u5f55\u65b9\u5f0f login.text.register=\u7528\u6237\u6ce8\u518c +login.text.register.success=\u6ce8\u518c\u6210\u529f +login.text.register.error=\u6ce8\u518c\u5931\u8d25\u000d\u000a +register.user.error=\u767B\u9646\u8D26\u53F7\u5DF2\u5B58\u5728 +register.emailMobile.error=\u90AE\u7BB1\u6216\u624B\u673A\u683C\u5F0F\u9519\u8BEF +register.emailMobile.exist=\u90AE\u7BB1\u6216\u624B\u673A\u5DF2\u5B58\u5728 login.password.expired=\u5bc6\u7801\u8fc7\u671f login.password.expired.tip=\u5bc6\u7801\u8fc7\u671f\uff0c\u8bf7\u4fee\u6539\u5bc6\u7801 diff --git a/maxkey-web-maxkey/src/main/resources/templates/views/login.ftl b/maxkey-web-maxkey/src/main/resources/templates/views/login.ftl index 81278360..6b42bac5 100644 --- a/maxkey-web-maxkey/src/main/resources/templates/views/login.ftl +++ b/maxkey-web-maxkey/src/main/resources/templates/views/login.ftl @@ -168,6 +168,9 @@ $(function(){ <#--todo:send captcha--> captchaCountTimer=setInterval("getCaptchaCount()", 1000); }); + $('#register').on('click',function(){ + window.location.href="<@base />/register"; + }); }); diff --git a/maxkey-web-maxkey/src/main/resources/templates/views/registration/register.ftl b/maxkey-web-maxkey/src/main/resources/templates/views/registration/register.ftl index 46576854..f672dedd 100644 --- a/maxkey-web-maxkey/src/main/resources/templates/views/registration/register.ftl +++ b/maxkey-web-maxkey/src/main/resources/templates/views/registration/register.ftl @@ -1,63 +1,125 @@ - - - - - - My JSP 'register.jsp' starting page - - - - - - + + + +<#include "../layout/header.ftl"> +<#include "../layout/common.cssjs.ftl"> + + + +
+ <#include "../layout/nologintop.ftl"> +
- - - - - -
- - -
- +
+
+
+ +
- - + + - - + + + - - + + - - + + - - - - - - - + + - + + - + + +
<@locale code="register.lastname"/><@locale code="forgotpassword.emailmobile"/>
<@locale code="register.firstname"/><@locale code="login.text.captcha"/>:
<@locale code="register.workemail"/><@locale code="userinfo.displayName"/>:
<@locale code="register.company"/><@locale code="userinfo.username"/>:
<@locale code="register.workphone"/>
<@locale code="register.users"/><@locale code="login.text.password"/>
"/><@locale code="login.password.confirmPassword"/>
"/>
-
- - +
+ + + + + \ No newline at end of file