对于任何有一定规模的系统而言,登录认证系统都是不可或缺的。登录认证实现方式众多,包括账密、社会化登录、OAuth2、LDAP 等,且各系统的登录认证往往功能重复。JustAuthPlus(JAP),就是一套灵活泛用的登录认证中间件。
JustAuthPlus(简称 JAP),是 fujieid 在Gitee上开源的登录认证中间件,仓库位于
https://gitee.com/fujieid/jap,目前版本为 v1.0.7。
JAP 基于模块化设计,为所有需要登录认证的 WEB 应用提供一套标准的技术解决方案,开发者可以基于 JAP 适配绝大多数的 WEB 系统(自有系统、联邦协议),简单方便。
JAP 简单易用,具有以下特性:
JAP功能丰富,包括:
JAP 适用于所有需要登录功能的场景。比如:
JAP使用模块化设计,分别提供不同功能。
jap-simple 是为了方便快速的集成本地账号密码登录而添加的增强包。使用前添加依赖:
<dependency>
<groupId>com.fujieid</groupId>
<artifactId>jap-simple</artifactId>
<version>{latest-version}</version>
</dependency>
然后实现 JapUserService 接口:
import com.fujieid.jap.core.JapUser;
import com.fujieid.jap.core.JapUserService;
public class JapSimpleUserServiceImpl implements JapUserService {
@Override
public JapUser getByName(String username) {
return new JapUser()
}
@Override
public boolean validPassword(String password, JapUser user) {
return user.getPassword().equals(password);
}
}
并实现登录的Controller,就能获得一个账号密码登录功能:
jap-oauth2 是为了方便快速的集成所有支持标准 OAuth 2.0 协议的平台而添加的增强包,添加依赖
<dependency>
<groupId>com.fujieid</groupId>
<artifactId>jap-oauth2</artifactId>
<version>{latest-version}</version>
</dependency>
实现 JapUserService 接口
public class JapOauth2UserServiceImpl implements JapUserService {
/**
* 根据第三方平台标识(platform)和第三方平台的用户 uid 查询数据库
*
* @param platform 第三方平台标识
* @param uid 第三方平台的用户 uid
* @return JapUser
*/
@Override
public JapUser getByPlatformAndUid(String platform, String uid) {
return null;
}
/**
* 创建并获取第三方用户,相当于第三方登录成功后,将授权关系保存到数据库
* (开发者业务系统中 oauth2 user -> sys user 的绑定关系)
*
* @param platform 第三方平台标识
* @param userInfo 第三方返回的用户信息
* @param tokenInfo token 信息,可以强制转换为 com.fujieid.jap.oauth2.token.AccessToken
* @return JapUser
*/
@Override
public JapUser createAndGetOauth2User(String platform, Map<String, Object> userInfo, Object tokenInfo) {
// FIXME 业务端可以对 tokenInfo 进行保存或其他操作
AccessToken accessToken = (AccessToken) tokenInfo;
System.out.println(JsonUtil.toJsonString(accessToken));
// FIXME 注意:此处仅作演示用,不同的 oauth 平台用户id都不一样,
// 此处需要开发者自己分析第三方平台的用户信息,提取出用户的唯一ID
String uid = (String) userInfo.get("userId");
// 查询绑定关系,确定当前用户是否已经登录过业务系统
JapUser japUser = this.getByPlatformAndUid(platform, uid);
if (null == japUser) {
// 保存用户
japUser = createJapUser();
japUser.setAdditional(userInfo);
userDatas.add(japUser);
}
return japUser;
}
}
JustAuthPlus作为一个登录认证中间件,其基于模块化设计,为所有需要登录认证的 WEB 应用提供一套标准的技术解决方案,开发者可以基于 JAP 适配绝大多数的 WEB 系统,简单方便。