目录
不需要登录就可以访问的API接口,可加上限制同一ip访问频率功能
调用方法
get
post
https://localhost:8443/author/jwt/login
参数 | 说明 |
---|---|
username | 用户名 |
password | 密码 |
//success
{"token":"服务器生成的token"}
调用方法
get
post
https://localhost:8443/author/jwt/getVerifyCode
参数 | 说明 |
---|---|
cellphone | 手机号码 |
//success
{
"code": 0,
"message": "success",
"data":{
"verifycode":"1234"
}
}
//error
{
"code": 1,
"message": "错误信息"
}
处理逻辑
- 1:在redis中
wukong:security:verifycode:{cellphone}:
添加一个随机数,并发给用户手机上,设置5分钟过期 - 2:用户输入验证码登录时,与redis中的内容进行验证
当前只实现用手机号码注册
调用方法
get
post
https://localhost:8443/author/jwt/regist
参数 | 说明 |
---|---|
cellphone | 手机号码 |
password | 密码 |
verifycode | 验证码 |
//success
{
"code": 0,
"message": "success",
"data":{
"token":"服务器生成的token数值"
}
}
//error
{
"code": 1,
"message": "错误信息"
}
处理逻辑
成功:
返回token
- 1:客户端输入:手机号 验证码 密码
- 2:服务器端判断
- 2.1: 校验格式:手机号 验证码 密码
- 2.2: 判断验证码是否有效
- 2.3: 判断手机号是否已经注册
- 2.3.1: 手机号存在 : 调用通过手机短信登录
- 2.3.2: 手机号码不存在:
- 新建立用户,用户名:(phone){cellphone};
- 并添加USER_ROLE;
- 根据新建的user,得到token,返回给客户端
(phone){cellphone}=(phone)13800138000 今后用户名中有(phone)开头的,都是手机注册的
调用方法
get
post
https://localhost:8443/author/jwt/loginByPhonemessage
参数 | 说明 |
---|---|
cellphone | 电话号码 |
verifycode | 验证码 |
//success
{
"code": 0,
"message": "success",
"data":{
"token":"服务器生成的token数值"
}
}
处理逻辑
成功:
返回token
- 1:客户端输入:手机号 验证码(服务器发送到用户手机上)
- 2:服务器端判断
- 2.1: 校验格式:手机号 验证码
- 2.2: 判断验证码是否有效
- 2.3: 判断手机号是否已经注册
- 2.3.1: 手机号存在 ,查询出用户,并生成token
- 2.3.1: 手机用户不存在,返回错误信息
'这个函数还需要仔细想想'
参数 | 说明 |
---|---|
type | 用户是否先用微博或微信登陆,(2:代表微博登陆,1:代表微信登陆) |
openId | 微博或微信的openId |
timeStamp | 时间戳 |
summary | 加密字段,加密方法(Key+type+openId+timeStamp 顺序进行MD5加密,Key的值为wech_app2015_en) |
//success
{
"code": 0,
"message": "success",
"data": {
"userid": 123,
"nickName": "",
"token": "",
"age": 0,
"sex": "",
"credential": "",
"cellphone": "",
"headImageUrl":"路径"
}
}
这是三个函数
电话号码
get
post
https://localhost:8443/author/jwt/phoneExist
邮箱get
post
https://localhost:8443/author/jwt/emailExist
用户名get
post
https://localhost:8443/author/jwt/usernameExist
参数 | 说明 |
---|---|
cellphone | 电话号码 |
邮箱 | |
username | 用户名 |
//success
{
"code": 0,
"message": "success",
"data":{
"phoneExist":true,
"emailExist":true,
"usernameExist":true
}
}
true:表示存在
上面的代码是实例文件,实际上只会返回一个
需要登录成功后才可访问的API接口,可加上防止重复提交功能
调用方法
get
post
https://localhost:8443/author/jwt/logout
调用方法
get
post
https://localhost:8443/author/jwt/refreshToken
//success
{
"code": 0,
"message": "success",
"data":{
"token":"服务器生成的token数值"
}
}
处理逻辑
- 1:服务器判断老的token是否有效,用户是否被禁用等.
- 2:只更新过期时间,然后将token返回给客户端.
调用方法
get
post
https://localhost:8443/author/jwt/prtoken
//success
{
"code": 0,
"message": "success",
"data":{
"prtoken":"prtoken"
}
}
处理逻辑 见:防止重复提交
参数 | 说明 |
---|---|
cellphone | 手机号码 |
password | 密码 |
verifycode | 验证码 |
//success
{
"code": 0,
"message": "success",
"data":{
"token":"服务器生成的token数值"
}
}
上面这个函数与注册的函数一样,所以写代码的时候,可以重用
详细内容见 防止重复提交
示例:@RequestLimit(count=10,time=5000)
其中count指的是规定时间内的访问次数,time指的就是规定时间,单位为毫秒
@Controller
public class URLController {
@RequestLimit(count=10,time=5000)
@RequestMapping("/urltest")
@ResponseBody
public String test(HttpServletRequest request, ModelMap modelMap) {
return "aaa";
}
}
参考
实现方法
待完善
参考文献
黑名单,不仅限于ip地址,还应该包含用户浏览器的cookie
黑名单,应该是一个智能的,系统自动判断异常,进行防御操作 用户访问的ip地址(或地域)经常变更,那么可能存在异常 应该记录下用户的登录日志