[]
        
(Showing Draft Content)

Java安全提供程序快速入门

欢迎使用活字格Java安全提供程序!本文档旨在介绍安全提供程序的基本概念,帮助您快速上手使用。

通过此篇文档,您将可以了解到:

  • 什么是活字格Java安全提供程序

  • 如何快速创建一个自定义的活字格Java安全提供程序

什么是活字格安全提供程序

当您希望将第三方系统的用户信息集成到活字格中使用时,就需要使用安全提供程序。它是一个插件化的连接器,活字格可以通过它获取同步第三方系统中的用户信息。

比如活字格官方默认提供的钉钉安全提供程序:

image

如何快速自定义安全提供程序

当官方提供的安全提供程序无法满足您的需求时,您就可以自定义安全提供程序。

安全提供程序的本质就是一个Java的接口 ISecurityProvider,您可以实现其接口中的方法来满足各种第三方用户数据到活字格的集成。

这里给您展示的是一个安全提供程序的示例代码:

public class CustomSecurityProvider implements ISecurityProvider {

    /**
     * 第三方系统中的所有用户信息,如果不需要提供用户信息,则返回 null
     * @return 第三方系统中的所有用户信息
     */
    @Override
    public UserInformations getUserInformations() {
        UserInformations userInformations = new UserInformations();
        HashSet<User> users = userInformations.getUsers();
        User user = new User();
        user.setUserId("ForguncyTest");
        user.setEmail("test@example.com");
        users.add(user);



        HashSet<Role> roles = userInformations.getRoles();
        Role role = new Role();
        role.setName("TestRole");
        role.getUsers().add(user);
        roles.add(role);

        List<Organization> organizations = userInformations.getOrganizations();
        Organization orgB = new Organization();
        orgB.setName("orgB");
        orgB.setOrganizationLevel("Level2");
        HashSet<OrganizationMember> orgBMember = orgB.getMembers();
        OrganizationMember organizationMemberB = new OrganizationMember();
        organizationMemberB.setUser(user);
        var rolesInOrg = new ArrayList<Role>();
        rolesInOrg.add(role);
        organizationMemberB.setOrganizationRoles(rolesInOrg);
        organizationMemberB.setIsLeader(false);
        orgBMember.add(organizationMemberB);
        organizations.add(orgB);
        return userInformations;
    }

    /**
     * 认证用户,在登录活字格时会调用此方法
     * @param properties 所需用户相关信息的参数字典,此例中,用户名以及密码会从此参数中获取
     * @return 认证成功则返回用户信息,否则可以返回 null 表示用户认证失败
     */
    @Override
    public User verifyUser(HashMap<String, String> properties) {
        String name = properties.get("userName");
        for (User user : getUserInformations().getUsers()) {
            if (user.getUserId().equals(name)) {
                return user;
            }
        }
        return null;
    }

    /**
     * 安全提供程序名称,主要用于在服务器中展示
     * @return 安全提供程序名称
     */
    @Override
    public String getName() {//返回securityProvider的名称(中文)
        return "CustomSecurityProvider";
    }

    /**
     * 用户认证的类型,目前默认为 UserNameAndPassword 即账号密码认证
     * 此例中也以这种方式进行认证
     * @return 用户认证的类型
     */
    @Override
    public AuthenticationType getAuthenticationType() {
        return AuthenticationType.UserNameAndPassword;
    }

    /**
     * 第三方应用获取的数据如何在活字格中保存,目前默认为 InForguncyDatabase 即保存在活字格数据库中
     * 此例中也以这种方式进行保存
     * @return 第三方应用获取的数据如何在活字格中保存
     */
    @Override
    public UserInformationStorageMode getUserInformationStorageMode() {
        return UserInformationStorageMode.InMemoryCache;
    }

    /**
     * 是否支持登出操作,如果支持,则在活字格中可以执行登出操作
     * @return 是否支持登出操作
     */
    @Override
    public boolean getAllowLogout() {
        return true;
    }

}

从上述代码中我们可以得到如下信息:

  • 安全提供程序可以给活字格服务器返回第三方系统中的所有用户信息

  • 通过安全提供程序,您可以使用第三方系统的用户认证逻辑来替换活字格的用户认证逻辑

  • 安全系统程序可以将第三方用户信息存储到活字格数据库中,从而达到更好的集成

当您实现了如上述的安全提供程序后,就可以加入活字格的服务器用以连接第三方系统了。

下一步

此章节仅是为您展示最简单的安全提供程序是如何工作的,在随后的章节中,我们会为您一步一步的介绍如何从零开始开发一个安全提供程序。

下一步,您将了解如何初始化安全提供程序的程序集,并最终打包为一个可供活字格服务器安装的合法安全提供程序。