4.用户模块开发

功能介绍

在这里插入图片描述
pom.xml–项目坐标,用于信息的描述;引入jar包;构建项目,是项目级别的配置文件。
web.xml–相当于一个容器,主要是用来注册你写的那些功能,像一些servlet despatcher filter 等等。每定义了一个注册的功能,都加一个mapping与之对应。

学习目标

1.横向越权、纵向越权安全漏洞
横向越权:攻击者尝试访问与他拥有相同权限的用户的资源
eg:如果忘记密码重设时,不传入forgettoken这个值,则对任意用户都可以随便重置密码,导致横向越权。
纵向越权:低级别攻击者尝试访问高级别用户的资源
2.MD5明文加密及增加salt值
3.Guava缓存使用
4.高复用服务响应对象的设计思想及抽象分类
三个属性:status;msg;data
5.Mybatis-plugin使用技巧
6.Session的使用
7.方法局部演进

数据表设计
接口设计

前台用户接口设计
https://gitee.com/imooccode/happymmallwiki/wikis/%E9%97%A8%E6%88%B7_%E7%94%A8%E6%88%B7%E6%8E%A5%E5%8F%A3?sort_id=9917
后台用户接口
https://gitee.com/imooccode/happymmallwiki/wikis/%E5%90%8E%E5%8F%B0_%E7%94%A8%E6%88%B7%E6%8E%A5%E5%8F%A3?sort_id=9912

登录接口

@ResponseBody注解:返回时自动通过SpringMVC的jackson插件让我们的返回值序列化成json。

通过泛型做一个通用的数据响应对象ServerResponse
该对象作用的解释:
https://www.cnblogs.com/chc24w/p/10299305.html
https://www.cnblogs.com/Tiancheng-Duan/p/11363437.html

@JsonSerialize(include =  JsonSerialize.Inclusion.NON_NULL)
//保证序列化json的时候,如果是null的对象,key也会消失
public class ServerResponse<T> implements Serializable {

    private int status;
    private String msg;
    private T data;

    private ServerResponse(int status){
        this.status = status;
    }
    private ServerResponse(int status,T data){
        this.status = status;
        this.data = data;
    }

    private ServerResponse(int status,String msg,T data){
        this.status = status;
        this.msg = msg;
        this.data = data;
    }

    private ServerResponse(int status,String msg){
        this.status = status;
        this.msg = msg;
    }

    @JsonIgnore
    //使之不在json序列化结果当中
    public boolean isSuccess(){
        return this.status == ResponseCode.SUCCESS.getCode();
    }

    public int getStatus(){
        return status;
    }
    public T getData(){
        return data;
    }
    public String getMsg(){
        return msg;
    }


    public static <T> ServerResponse<T> createBySuccess(){
        return new ServerResponse<T>(ResponseCode.SUCCESS.getCode());
    }

    public static <T> ServerResponse<T> createBySuccessMessage(String msg){
        return new ServerResponse<T>(ResponseCode.SUCCESS.getCode(),msg);
    }

    public static <T> ServerResponse<T> createBySuccess(T data){
        return new ServerResponse<T>(ResponseCode.SUCCESS.getCode(),data);
    }

    public static <T> ServerResponse<T> createBySuccess(String msg,T data){
        return new ServerResponse<T>(ResponseCode.SUCCESS.getCode(),msg,data);
    }


    public static <T> ServerResponse<T> createByError(){
        return new ServerResponse<T>(ResponseCode.ERROR.getCode(),ResponseCode.ERROR.getDesc());
    }


    public static <T> ServerResponse<T> createByErrorMessage(String errorMessage){
        return new ServerResponse<T>(ResponseCode.ERROR.getCode(),errorMessage);
    }

    public static <T> ServerResponse<T> createByErrorCodeMessage(int errorCode,String errorMessage){
        return new ServerResponse<T>(errorCode,errorMessage);
    }

MyBatis在传递多个参数时,需要用到param注解。

流程:先用UserMapper写接口数据,再在UserMapper.xml中用sql语句实现,然后用UserServiceImpl调用xml中的内容,然后在service接口IUserService中声明,然后把Service注入到controller上供controller调用。

退出登录接口

只要在controller层删除Session,不需要涉及到Service层。

注册登录接口

可以通过一个内部的接口类,把我们的常量进行分组,将普通用户和管理员分开。

获取用户登录信息,忘记密码,提示问题与答案,重置密码功能开发

在客户端用户登录时忘记密码,需要找回密码,通过正确输入找回密码答案来访问服务端的修改密码接口。为了防止恶意用户来直接访问修改密码接口,在调用验证答案接口后采用token机制来验证身份,并用Guava Cache做一个定时的token来保证安全性。

项目中的Token,主要用做身份验证。
1、点击忘记密码之后,检验用户名是否存在
2、存在则根据用户名查询问题
3、回答答案正确的话生产Token,并将其放到guava cache本地缓存中
4、将Token返回给客户端

Guava Cache是单个应用运行时的本地缓存。它不把数据存放到文件或者外部服务器上。简单强大、及轻量级。不需要配置文件,使用起来和ConcurrentHashMap一样简单,而且能覆盖绝大多数使用cache的场景需求.

使用token机制的身份验证方法,在服务器端不需要存储用户的登录记录。大概的流程:客户端使用用户名和密码请求登录。服务端收到请求,验证用户名和密码。验证成功后,服务端会生成一个token,然后把这个token发送给客户端。客户端收到token后把它存储起来,可以放在cookie或者Local Storage(本地存储)里。客户端每次向服务端发送请求的时候都需要带上服务端发给的token。服务端收到请求,然后去验证客户端请求里面带着token,如果验证成功,就向客户端返回请求的数据。

用户相关的接口全部改为用POST提交。

参考文献:https://blog.csdn.net/qq_28021299/article/details/80541755

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值