一个简单的登陆注册中心实现
- 作者:
- 淡白
- 创建时间:
- 2020-02-12 21:44:41
- redis token dblogin
摘要:该文介绍了一个简单的登录注册中心,类似于微服务中的单点登录。作者在开发过程中发现频繁重复编写和使用登录注册功能的问题,因此开发了这个登录注册中心。服务端使用MySQL数据库存储用户信息,并使用Redis存储登录状态。接口包括登录、退出登录、设置token过期时间、注册、获取用户名和删除用户等功能。作者还提供了一个Java客户端库,方便与服务端进行通信。
简介
由于自己时常写一些小东西练手,有的需要涉及到用户登陆注册.网站应用多了的话简单的账号登陆注册重复写以及使用的时候重复注册登陆.于是乎我就写了这样一个登陆注册中心(就像微服务中的单点登录一样只是更简单)
服务端
表结构
CREATE TABLE `user` (
`username` varchar(128) NOT NULL,
`password` varchar(256) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
只做一件事就是登陆注册所以就只有一张表结构也就很简单.
登陆处理
1.将请求来的用户密码验证(验证成功继续)
2.获取个32位uuid(token) 以它为key用户名为value存入redis
3.返回token
返回的token可以请求出用户名 后续操作带上token即可
public Resources login(User user) {
User user1 = getUser(user.getUsername());
//用户名存在
if (user1 != null) {
if (StringUtils.md5(user.getPassword()).equals(user1.getPassword())) {
String uuid = uuidUtils.getUUID32();
redisTemplate.opsForValue().set(uuid, user.getUsername(), 1, TimeUnit.DAYS);
return Resources.Ok().setMsg("登陆成功").setData(uuid);
}
return Resources.Err().setMsg("账号或密码错误");
}
return Resources.Err().setMsg("账号不存在");
}
接口
- /login 登陆(用户名,密码)
- /logout 退出登陆(token)
- /tokenTime token过期时间(token,时间秒)
- /register 注册(用户名,密码)
- /username token获取用户名(token)
- /delete 删除用户(用户名)
如果服务端配置开启了口令还必须携带正确口令才行
客户端
可以通过http请求以上接口进行与服务端间的通信. java我封装了一个客户端可以直接依赖调用. 在pom中添加
<dependency>
<groupId>cn.p00q.dblogin</groupId>
<artifactId>client</artifactId>
<version>1.0</version>
</dependency>
在application配置中添加
danbai:
dblogin:
passwordManagement: "DanBai" #没用口令可不要
serviceURL: "http://127.0.0.1:8085"
在需要使用的地方注入 如:
@Autowired
DBlogin dBlogin;