Solon v3.0.6

grit-client-solon-plugin

</> markdown
<dependency>
  <groupId>org.noear</groupId>
  <artifactId>grit-client-solon-plugin</artifactId>
  <version>2.0.1</version>
</dependency>

1、描述

(使用时,需要配置“企业版 Licence”)基于 grit 构建,提供单点登录(SSO)和签权服务。可与 server 同时使用,实现单体效果;也可以分开使用,实现中间件效果。主要接口:

接口获取说明
ResourceServiceGritClient.global().resource()资源接口
ResourceLinkServiceGritClient.global().resourceLink()资源关联接口
ResourceSchemaServiceGritClient.global().resourceSchema()资源架构接口(用于导入导出空间资源)
SubjectServiceGritClient.global().subject()主体接口
SubjectLinkServiceGritClient.global().subjectLink()主体关联接口
AuthServiceGritClient.global().auth()签权接口

可以直接使用(基于 solon-auth 接口规范),或者对接 sa-token 之类的鉴权框架。

2、配置示例

  • 作为纯客户端使用
gritclient:
  server: "http://localhost:8081"
  token: "B6uWZDYUm4kMscdEAERXQ2wMBW1nLL0j"
  • 与服务端同体使用

不需要配置。自动转为 jdbc 模式

3、代码示例

  • 登录
@Controller
public class LoginController {
    @Mapping("login")
    public Result login(String username, String password) throws Exception {
        Subject subject = GritClient.global().auth().login(username, password);

        if (subject == null || subject.subject_id == 0) {
            return Result.failure();
        } else {
            return Result.succeed(subject);
        }
    }
}
  • 鉴权配置(支持 solon-auth 接口规范)
public class AuthProcessorImpl extends GritAuthProcessor {
    @Override
    protected long getSubjectId() {
        return Context.current().sessionAsLong("user_id");
    }
}


@Configuration
public class AutoConfig {
    @Bean
    public AuthAdapter init() {
        return new AuthAdapter()
                .loginUrl("/login") //设定登录地址,未登录时自动跳转
                .addRule(r -> r.include("**").verifyIp().failure((c, t) -> c.output("你的IP不在白名单"))) //添加规则
                .addRule(b -> b.exclude("/login**").exclude("/_**").verifyPath()) //添加规则
                .processor(new AuthProcessorImpl()); //设定认证处理器
    }
}
  • 构建菜单数据
List<ResourceGroup> groupList = GritClient.global().auth().getUriGroupList(subjectId);

for (ResourceGroup group : groupList) {
    ResourceEntity res = GritClient.global().auth().getUriFristByGroup(subjectId, group.resource_id);

    if (Utils.isEmpty(res.link_uri) == false) {
         //res...
    }
}

具体示例