在SpringMVC框架中统一处理异常及请求参数验证(6)

关于实际使用的页面,可以通过https://robinliu.3322.org:8888/download/demo/straw_v1.4.zip下载,将下载得到的页面及相关文件复制到项目的src/main/resources/static文件夹下即可(如果static文件夹不存在,可自行创建)。


关于实际使用的注册页面,需要调整的位置有:


第30行:为<div>标签添加v-bind:class="{'d-block': hasError}",表示通过Vue的hasError属性来控制CSS样式中名为d-block的值,这个d-block表示display block,即将当前标签以区块的形式显示出来,它是由Bootstrap定义的,取值是布尔值;


第31行:为<span>标签添加v-text="errorMessage",表示该标签显示的文本绑定到Vue的errorMessage属性;


第34行:为<form>标签添加id="form-register"和v-on:submit.prevent="register",前者将用于AJAX请求中序列化请求参数,后者表示绑定表单的提交事件到Vue的register方法(函数),其中的prevent表示阻止原有的提交方法,在这个<form>标签中原有的其它属性都可以删除;


第37行:将<input>标签中的v-model="inviteCode"删除,否则可能报错;


自行添加<script>标签处理页面:

<script>
    let app = new Vue({
        el: '#app',
        data: {
            hasError: false,
            errorMessage: null
        },
        methods: {
            register: function () {
                app.hasError = false;
                app.errorMessage = null;
                $.ajax({
                    url: '/portal/user/student/register',
                    data: $('#form-register').serialize(),
                    type: 'post',
                    dataType: 'json',
                    success: function (json) {
                        console.log(json);
                        if (json.state == 2000) {
                            alert("注册成功!");
                            // location.href = '某个页面';
                        } else {
                            app.hasError = true;
                            app.errorMessage = json.message;
                        }
                    }
                });
            }
        }
    });
</script>



11. 注册成功后的收尾工作


当前user数据表的设计中,关于密码字段是char(68),但是,实际存入的密码长度只有60位,其实,在存入密码之前,应该在加密结果之前添加{bcrpyt}前缀,这个前缀的作用是声明当前密文的加密方式是通过BCrpyt算法实现的,Spring Security可以根据算法类型自动调用匹配的算法进行密码验证!


所以,在UserServiceImpl类中,在加密方法中添加补全前缀:


/**
 * 执行密码加密
 *
 * @param rawPassword 原密码
 * @return 根据原密码执行加密得到的密文
 */
private String encode(String rawPassword) {
    String encodePassword = passwordEncoder.encode(rawPassword);
    encodePassword = "{bcrypt}" + encodePassword;
    return encodePassword;
}


由于改变了密码规则,原有的密码就不合适了,甚至原本还存在更多的错误数据,应该将这些数据全部删除:


delete from user;

1

或:


truncate user;


12. 阶段小结


关于使用到的技术:


SpringBoot;

Lombok:使得开发人员不必再显式的声明Setters、Getters、toString()等代码,还可以更加便捷的使用@Slf4j注解来输出日志;

Slf4j:输出日志,自定义日志级别,输出时可以使用占位符避免反复拼接字符串;

MyBatis Plus:已经完成了许多常规的增删改查,使得开发人员不必自行编写相关代码,简化了持久层的开发,当然,MyBatis Plus已经完成的功能并不能满足所有的需求,甚至某些方法可能不太易用,如果开发人员需要自定义其它数据访问功能,也可以参考MyBatis的使用方式来开发新的数据访问功能;

MyBatis Plus Generator:用于自动生成一些项目中的文件,包括:实体类、持久层接口、持久层XML、业务层接口、业务层实现类、控制器类,它是基于数据表的字段设计来自动生成的;

Spring Security:未完待续;

Spring Validation:验证请求参数的有效性;

自定义异常和统一处理异常。


上一篇:React---新扩展Context和组件优化


下一篇:Android开发应用实例:计算标准体重的实例(简单版)