用户模块-登录接口完整code

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用户模块-登录接口完整code相关的知识,希望对你有一定的参考价值。

参考技术A -新建UserController
-在类上面,添加spring注解,@Controller,起到Controller作用
-在类上面,添加@RequestMapping("/user/"),把请求地址放到/user命名空间下
-构造类里登录函数login,参数username,password,session
-注释:用户登录
-添加@RequestMapping(value=" Login.do ",method= RequestMapping.POST ),value和接口名保持一致,设置方法post
-添加RequestBody,在返回值的时候,自动通过springmvc的josn 插件将返回值序列化成josn ,通过插件的配置文件dispatche-servlet.xml看到bean(如图),点击bean所指向的类,打开没有看到supportMedicaTypes这个属性,打开其所继承的父类,发现supportMedicaTypes属性,且是个集合,因此在dispatche-servlet.xml中直接把要配置的application/josn注入到集合value里面,这样,MVC返回值通过responseBody注解自动序列化成 josn 。

-写service,调用mybatis的dao层

-创建接口IUserService,便于维护,为AOP做准备,无论是静态代理或者是动态代理,还是后续发展成的AOP都用接口代理,也可以用czlib来代理class,但是这种方式没有接口扩展性强
-声明login接口

-创建实现类UserServiceImpl,注入实现方法

-用范型声明该类,传范型T,代表响应里面要封装的数据对象是什么类型,让它实现序列化接口Serializable
-声明三个属性:int status,String msg,T data,data代表我们将返回的范型使用对象,为了做成通用的,采用T 做一个范型,好处:返回时可以指定范型内容,也可以不指定类型

-构造方法,写成私有的,即外部不能new;几个私有的构造器,调用比较方便,规避String msg和String data的冲突(data的值可能会传进msg里)

-封装一个方法isSuccess,来确认这个响应是不是成功的响应,如果status是0则success,1则fail

-用一个枚举来对数字归类

0-成功,1-出错,10-需要登录,2-不合法参数

-声明两个属性code,desc,写出构造器

-响应编码枚举类完成,扩展只需要继续编辑即可

更改isSuccess方法,如果SUCCESS.getcode返回为0,即返回true
(其实isSuccess方法不是一直都是0值吗?)

-创建三个公有构造器

-创建成功状态下的公有构造器,调用私有构造器,1.仅status,2、status+msg 3、status+data 4、status+msg+data;此时解决了上面提到的“传String data的冲突(data的值可能会传进msg里)”,因为public构造器里面传参使用 T类型,调用私有构造器时仅传入T类型的data里

--创建失败状态下和其他错误状态的公有构造器(但是这个errorCode是??)

--加工。三个属性int status,String msg,T data是序列化返回给前端,但是isSuccess是public,会显示在前端的josn里,所以要加一个@JosnIgnore注解,则该字段序列化之后不会显示在josn里面

--public 的get方法都会显示在josn里面

--注意:失败有时候不返回data,此时是有data-key的空节点,data-value是null,这种是不需要返回给前端的,控制方法:在类前面增加注解@JosnSerialize(include = JosnSerialize.Inclusion.NOT_NULL)
该注解作用,仅返回非空值,比如只需要返回status,那么msg和data为空就不会返回给前端
【保证序列化json的时候,null的对象,key也会消失】

-先把IUserService和UserServiceImpl中login的方法返回类型都改成ServiceResponse<T>类型

-把mapper通过注解方式引进来

-编写UserMapper接口,增加checkUser方法

-编写UserMapperImpl,用#防止sql注入,会进行预编译

-回到service,使用范型做的高可用的服务端相应类进行报错

-MD5不可逆转加密方法,先// to do MD5

-继续判断用户密码,编写mapper,返回值User,因为一旦登录成功,返回值是User
注意:Mybatis传多个参数需要用到@Param注解,写sql是要对应@Param注解里面的String

-resultmap引用mapper顶部有自定义的,resulttype引用java本来有的类型(parametetype也是),parametetype为map(全称为:java.util.Map)型,因为会接收多个参数
注意:sql语句最好不要写成select *,因为实际开发过程中,表是会发生变化的,如果始终只是要两个字段,那么select *就不利于维护,要什么查什么
用<include refid>可以方便要查询的数据

-回到service层,处理密码错误情况和能成功登录的情况,setPassword是为了将返回值密码置为空

-先声明,@service("iUserService")

-把service注解到controller

-声明一个常量类,Const,当前用户

-在login方法里声明一个response,如果isSuccess为0,成功响应。
然后调用常量类的属性,设置session属性,两个参数

以上是关于用户模块-登录接口完整code的主要内容,如果未能解决你的问题,请参考以下文章

使用 Abp.Zero 搭建第三方登录模块:微信小程序开发

Java实现微信登录

小程序 判断是不是为新用户 登陆授权 封装request请求

DRF框架QQ登录功能

微信授权登录并获取用户信息接口开发

小程序的登录授权