从零开始写项目第二篇【登陆注册、聊天、收藏夹模块】(一)

简介: 笔记

登陆模块目标


我要将其弄成类似的登陆,功能是要比较完善的。

7.png

本来我是想做一步写一步的,但是发现这样文章就会太乱,因为要改的地方太多了。前面写过的,后边就被修改了。这样看起来太混乱了。因此我现在是写完代码才来补这篇记录的。尽可能把当时的思路记录下来,并且捋一捋看一下有没有不足的地方。


编写注册模块过程


我的登陆注册模块主要是使用邮箱,这部分之前是没有了解过的。因此去找了一点资料。想完成使用邮箱来激活用户的思路可看下面:

http://blog.csdn.net/u013863751/article/details/45600651

根据这个思路,我就创建数据库表了,数据库表的设计如下:

8.jpg

设计完数据库表之后就去写前台页面了。因为登陆注册这部分的Dao层并不难,就几个简单的方法。


注册页面和校验


前台我使用的是Bootstrap为主,登陆注册模块是使用bootstrap官网提供的模版。

9.png

导航栏是使用之前看见过别人博客上的导航条:

http://blog.csdn.net/iamcgt/article/details/72863303

有了导航条和bootstrap官网提供的登陆注册模版了,背景现在太过单薄了。我想到了一个开源的项目:https://github.com/VincentGarreau/particles.js。于是下载下来改了一下。我的首页样式就有了。

particles.js参考教程:

http://blog.csdn.net/csdn_yudong/article/details/53128570

使用时要注意的是:particles  div中包含的内容需要绝对定位。

10.jpg

注册的时候需要做前台校验的。本来是想自己写正则表达式做校验的,后来发现有BootstrapValidation这样一个组件。于是就去下载使用了。

boostrapValidation参考教程:

http://www.cnblogs.com/huangcong/p/5335376.html

http://blog.csdn.net/nazhidao/article/details/51542508

bootstrapValidation有一个坑,submitHandler提交方法只有0.45版本才有效(亲测)。后来在寻找版本的时候发现了一个非常有用的网站:能够查询到多个版本,十分好用。

http://www.bootcdn.cn/

经过一顿整改,我的页面和验证效果如下:

11.jpg0.jpg


注册后台


做了前台的校验是不够的。因为有可能别人是知道我们注册的url就直接对其进行访问了(绕过bootstrapValidation来注册),因此我们还需要做后台校验。后台校验我使用的是SpringMVC的校验。也就是 Hibernate Validator(和Hibernate的ORM无关)。

要使用springMVC校验就要导入对应的maven坐标:

<!--spring Validation校验-->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>4.3.0.Final</version>
        </dependency>
        <dependency>
            <groupId>org.jboss.logging</groupId>
            <artifactId>jboss-logging</artifactId>
            <version>3.1.0.CR2</version>
        </dependency>
        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>1.0.0.GA</version>
        </dependency>

参考资料:

http://www.cnblogs.com/liukemng/p/3738055.html

https://zhongfucheng.bitcron.com/post/springmvc/springmvcdi-liu-pian-xiao-yan-tong-yi-chu-li-yi-chang

在写配置文件的时候虽然idea提示是红色的,但是无妨,还是可以或获取得到的。对其忽略就行

12.jpg

那么我们的后台校验也已经完成了。

还有需要做校验的就是,如果用户已经注册过了,我们就不能让它再注册了。为了达到更好的用户体检,在提交表单前使用ajax来做校验就行了

//邮箱去做后台唯一性校验
                submitHandler: function (validator, form, submitButton) {
                    var $email = $("#userEmail").val();
                    console.log($email);
                    $.ajax({
                        url: path + "/user/validateEmail.do",
                        type: "post",
                        async: false,
                        data: {
                            "userEmail": $email
                        },
                        success: function (responseText) {
                            if (responseText == "noEmail") {
                                validator.defaultSubmit();
                                sweetAlert("请到您指定的邮箱完成激活");
                            } else {
                                sweetAlert("您的邮箱已注册过了");
                            }
                        },
                        error: function () {
                            sweetAlert("系统错误!");
                        }
                    });
                }

做这个唯一性校验其实就是比对数据库有没有该条邮箱的记录罢了

在寻找资料的时候发现了sweetAlert这么一个组件,发现比浏览器自带的alert要好看得多。因此又去下载来用了。值得一提的是,我使用的环境是windows下载zip的方式,在官网下载的css文件是自带有错的。后来还是去上面我说的那个网站直接找出它的css和js文件就好了。

资料如下:

http://mishengqiang.com/sweetalert/

效果如下:

13.jpg

搞了那么久,就剩下入数据库了。

/**
     * 先对数据进行校验,再注册
     *
     * @param user
     * @return
     * @throws Exception
     */
    @RequestMapping("/register.do")
    public String register(@Validated User user, BindingResult bindingResult) throws Exception {
        //如果参数不对,就直接返回注册页面
        List<ObjectError> allErrors = bindingResult.getAllErrors();
        if (allErrors != null && allErrors.size() > 0) {
            return "redirect:/goURL/user/toRegister.do";
        }
        //对密码进行加密md5(密码+salt)后才存到数据库中
        userService.encryptedPassword(user);
        userService.insert(user);
        //提示用户发送了邮件,让用户激活账户
        String url = getProjectPath() + "/user/activate.do?userId=" + user.getUserId();
        emailService.sendEmail(user, "注册", url);
        return "redirect:/common/countDown.html";
    }

首次插入进数据库的时候,激活码默认值是0,还有uuid生成

<!--insert被自定义了。-->
  <insert id="insert" parameterType="zhongfucheng.entity.User" >
    <selectKey keyProperty="userId" order="BEFORE" resultType="string">
      select uuid()
    </selectKey>
    insert into table_user (user_id, user_nickname, user_password,
    user_email, acti_state, acti_code,
    salt,token_exptime)
    values (#{userId}, #{userNickname,jdbcType=VARCHAR}, #{userPassword,jdbcType=VARCHAR},
    #{userEmail,jdbcType=VARCHAR}, 0,  uuid(),
    #{salt},now())
  </insert>

对密码加密也很简单:生成一个随机数作为salt,使用md5(用户传递进来的密码+salt)

发送邮件就涉及到了javaMail了,javaMail之前是没有接触过的。于是就去找了几篇资料:

http://www.cnblogs.com/leechenxiang/p/6367432.html

http://www.cnblogs.com/codeplus/archive/2011/11/03/2232893.html

目录
相关文章
|
10月前
|
前端开发
|
5月前
|
小程序 前端开发 Shell
微信小程序(十六)小程序仿微信聊天页面及功能(2)
page{ background-color: #EDEDED; } .index{ position:fixed; width: 100%; float: left; height: 64px; padding: 20rpx 220rpx 0 0; box-shadow: 0rpx 0rpx 0rpx; min-height: 0px; display: flex;align-items: center; background-color:#fff; z-index:9999; border-bottom: 1px solid #f7f7f7;
97 0
|
小程序
视频号主页,实现一键添加个人微信功能,留客更方便,真香
在视频号主页放置添加微信的按钮,其实微信已经支持了,只不过只支持企业微信,不支持个人微信,那怎么办,只能自己实现了。
357 0
视频号主页,实现一键添加个人微信功能,留客更方便,真香
|
前端开发 数据安全/隐私保护 开发者
项目第十三天内容介绍 | 学习笔记
快速学习 项目第十三天内容介绍
60 0
|
存储 缓存 NoSQL
项目第十一天内容介绍 | 学习笔记
快速学习 项目第十一天内容介绍
52 0
|
前端开发 Python
【Django | 开发】面试招聘信息网站(处理产品细节和权限&美化页面样式)
【Django | 开发】面试招聘信息网站(处理产品细节和权限&美化页面样式)
【Django | 开发】面试招聘信息网站(处理产品细节和权限&美化页面样式)
|
测试技术
接口测试平台代码实现番外:主页改版-7
接口测试平台代码实现番外:主页改版-7
接口测试平台代码实现番外:主页改版-7
|
JavaScript 前端开发 测试技术
接口测试平台代码实现番外:主页改版-5
上节之后有粉丝私聊觉得,平台右上角的“主页/退出” 按钮已经过时。所以我们本节首先来优化下。
接口测试平台代码实现番外:主页改版-5
|
前端开发 测试技术 Python
接口测试平台代码实现番外:主页改版-4
接口测试平台代码实现番外:主页改版-4
接口测试平台代码实现番外:主页改版-4
|
前端开发 JavaScript 测试技术
接口测试平台代码实现番外:主页改版-3
接口测试平台代码实现番外:主页改版-3
接口测试平台代码实现番外:主页改版-3