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

简介: 笔记

登陆模块目标


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

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

目录
相关文章
|
8月前
|
开发框架 Java 应用服务中间件
[置顶]动态网页开发基础【笔记】
[置顶]动态网页开发基础【笔记】
|
存储 前端开发 安全
【JavaWeb】手把手教你做一个用户登录注册案例(三)
【JavaWeb】手把手教你做一个用户登录注册案例(三)
|
前端开发 数据安全/隐私保护
【JavaWeb】手把手教你做一个用户登录注册案例(一)
【JavaWeb】手把手教你做一个用户登录注册案例(一)
1187 0
|
存储 前端开发 数据安全/隐私保护
【JavaWeb】手把手教你做一个用户登录注册案例(二)
【JavaWeb】手把手教你做一个用户登录注册案例(二)
|
前端开发 测试技术 Python
接口测试平台代码实现番外:主页改版-4
接口测试平台代码实现番外:主页改版-4
接口测试平台代码实现番外:主页改版-4
|
JavaScript 测试技术
接口测试平台代码实现番外:主页改版-2
接口测试平台代码实现番外:主页改版-2
接口测试平台代码实现番外:主页改版-2
|
前端开发 JavaScript 测试技术
接口测试平台代码实现番外:主页改版-3
接口测试平台代码实现番外:主页改版-3
接口测试平台代码实现番外:主页改版-3
|
前端开发 JavaScript 测试技术
接口测试平台代码实现番外:主页改版-6
本节我们来实现下那三个饼形图的后台逻辑,不过我这里只做其中一个的,其他俩个留着日后再用。 也就是用户的 资源占平台总的比。资源暂时定为项目数比 接口数比 用例数 。 这里大家可以自行设计,本教程只演示如何实现这个流程。
接口测试平台代码实现番外:主页改版-6
接口测试平台代码实现番外:主页改版-9
上节,我们搞定了 首页搜索的功能的mock版本,就是写死了返回值的假版本。本节课就来搞定真实的搜索吧。
接口测试平台代码实现番外:主页改版-9
|
前端开发 JavaScript 测试技术
接口测试平台代码实现番外:主页改版-8
接口测试平台代码实现番外:主页改版-8
接口测试平台代码实现番外:主页改版-8