JA Plus 开发者文档 JA Plus 开发者文档
首页
📖 白皮书 (opens new window)
  • 名词解释
  • 快速开始

    • 使用jap-simple
    • 使用jap-social
    • 使用jap-oauth2
    • 使用jap-oidc
    • 使用jap-sso
    • 使用jap-mfa
    • 使用jap-http-api
    • 使用jap-ldap
    • 错误代码
  • IDS

    • 简介
    • 快速开始
    • 自定义scope
    • 自定义登录页面
    • 自定义确认授权页面
    • 自定义缓存
    • 自定义Token加密密钥
    • 使用PKCE模式
    • 自动授权
    • 错误代码
  • starter

    • jap-spring-boot-starter
    • jap-simple-spring-boot-starter
    • jap-social-spring-boot-starter
    • jap-oauth2-spring-boot-starter
    • jap-oidc-spring-boot-starter
  • jap-ids的demo
  • 前后端分离架构中使用JAP
  • SpringBoot中使用JAP
  • 问题反馈
  • 项目问题
  • 异常问题
  • 功能问题
  • 数据看板🔥
  • 贡献指南
  • 行为准则
  • 用户权益
  • 贡献者们
  • 社区配套 (opens new window)
  • 教程
  • 投稿
  • 资讯
  • 关于
  • 友情链接
  • 捐赠列表
  • 其他开源
  • 更新记录
收藏
GitHub (opens new window)

FuJie Team

以开源的形式赋能开发者. Just auth into any app.
首页
📖 白皮书 (opens new window)
  • 名词解释
  • 快速开始

    • 使用jap-simple
    • 使用jap-social
    • 使用jap-oauth2
    • 使用jap-oidc
    • 使用jap-sso
    • 使用jap-mfa
    • 使用jap-http-api
    • 使用jap-ldap
    • 错误代码
  • IDS

    • 简介
    • 快速开始
    • 自定义scope
    • 自定义登录页面
    • 自定义确认授权页面
    • 自定义缓存
    • 自定义Token加密密钥
    • 使用PKCE模式
    • 自动授权
    • 错误代码
  • starter

    • jap-spring-boot-starter
    • jap-simple-spring-boot-starter
    • jap-social-spring-boot-starter
    • jap-oauth2-spring-boot-starter
    • jap-oidc-spring-boot-starter
  • jap-ids的demo
  • 前后端分离架构中使用JAP
  • SpringBoot中使用JAP
  • 问题反馈
  • 项目问题
  • 异常问题
  • 功能问题
  • 数据看板🔥
  • 贡献指南
  • 行为准则
  • 用户权益
  • 贡献者们
  • 社区配套 (opens new window)
  • 教程
  • 投稿
  • 资讯
  • 关于
  • 友情链接
  • 捐赠列表
  • 其他开源
  • 更新记录
收藏
GitHub (opens new window)
  • 使用指南
  • 名词解释
  • 快速开始

    • 使用jap-simple
    • 使用jap-social
    • 使用jap-oauth2
    • 使用jap-oidc
    • 使用jap-sso
    • 使用jap-mfa
    • 使用jap-http-api
      • 引入依赖
      • 实现 JapUserService
      • 实现 Controller
      • 测试登录
      • 配置项说明
      • 官方推荐
    • 使用jap-ldap
    • JAP 错误代码
  • IDS

  • starter

  • 指南
  • 快速开始
FuJie Team
2021-09-26

使用jap-http-api

提示

jap-http-api 支持 Basic、Digest 和 Bearer 等方式

# 引入依赖

<dependency>
    <groupId>com.fujieid</groupId>
    <artifactId>jap-http-api</artifactId>
    <version>{latest-version}</version>
</dependency>
<!--
jap 已经使用 simple-json 解耦 json 类库,开发者只需要选择适合的依赖引入即可,支持依赖:
    - jackson
    - fastjson
    - gson
    - hutool-json
关于 simple-json 更多使用方式参考:https://github.com/xkcoding/simple-json
-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.73</version>
</dependency>

<!--
jap 已经使用 simple-http 解耦 http 类库,开发者只需要选择适合的依赖引入即可,支持依赖:
    - java 11 HttpClient
    - OkHttp3
    - apache HttpClient
    - hutool-http
关于 simple-http 更多使用方式参考:https://github.com/xkcoding/simple-http
-->
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-http</artifactId>
    <version>5.2.5</version>
</dependency>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

# 实现 JapUserService

JapUserService 是 JAP 调用(操作)开发者业务系统中的用户接口。使用 jap-http-api 模块时,如果指定的认证 HTTP 认证方式是 Bearer 认证,则需要实现 saveHttpAuthedJapUser 方法和 getByName 方法。

public class JapHttpApiUserServiceImpl implements JapUserService {

    private static List<JapUser> userDatas = new ArrayList<>();

    @Override
    public JapUser getByName(String username) {
        return userDatas.stream().filter((user) -> user.getUsername().equals(username)).findFirst().orElse(null);
    }

    @Override
    public void saveHttpAuthedJapUser(JapUser japUser) {
        // 删除数据库中与 japUser 用户名重复的用户
        userDatas = userDatas.stream().filter((japUser1 -> {
            return !japUser1.getUsername().equals(japUser.getUsername());
        })).collect(Collectors.toList());
        userDatas.add(japUser);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 实现 Controller

import com.fujieid.jap.core.cache.JapLocalCache;
import com.fujieid.jap.core.config.JapConfig;
import com.fujieid.jap.core.result.JapResponse;
import com.fujieid.jap.http.adapter.jakarta.JakartaRequestAdapter;
import com.fujieid.jap.http.adapter.jakarta.JakartaResponseAdapter;
import com.fujieid.jap.httpapi.HttpApiConfig;
import com.fujieid.jap.httpapi.HttpApiStrategy;
import com.fujieid.jap.httpapi.enums.AuthInfoFieldEnum;
import com.fujieid.jap.httpapi.enums.AuthSchemaEnum;
import com.fujieid.jap.httpapi.enums.HttpMethodEnum;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@RestController
@RequestMapping("/httpauth")
public class BasicAuthController {

    @PostMapping("/basic")
    public JapResponse login(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {
        // 配置必要参数
        HttpApiConfig httpApiConfig = new HttpApiConfig();
        httpApiConfig.setHttpMethod(HttpMethodEnum.GET);
        httpApiConfig.setAuthInfoField(AuthInfoFieldEnum.BODY);
        httpApiConfig.setAuthSchema(AuthSchemaEnum.BASIC);
        httpApiConfig.setLoginUrl("http://httpbin.org/basic-auth/foo/bar");
        // 执行认证
        HttpApiStrategy httpApiStrategy = new HttpApiStrategy(new JapHttpApiUserServiceImpl(), new JapConfig(), new JapLocalCache());
        // 获取认证结果
        return httpApiStrategy.authenticate(httpApiConfig, new JakartaRequestAdapter(httpServletRequest), new JakartaResponseAdapter(httpServletResponse));
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

在执行 httpApiStrategy#authenticate 方法时需要使用 JakartaRequestAdapter 和 JakartaResponseAdapter 将 httpServletRequest 和 httpServletResponse 转换为 JapHttpRequest 和 JapHttpResposne。

# 测试登录

使用 Postman 测试通过 /httpauth/basic 接口是否能够成功通过第三方系统的认证。

# 配置项说明

参数名 参数类型
authSchema AuthSchemaEnum
httpMethod HttpMethodEnum
loginUrl String
authInfoField AuthInfoFieldEnum
customHeaders Map<String, String>
customParams Map<String, String>
customBody Map<String, String>
bearerTokenIssueUrl String
requestBodyToJapUserStrategy RequestBodyToJapUserStrategy接口
forBearerTokenEnum ForBearerTokenEnum
getTokenFromResponseStrategy GetTokenFromResponseStrategy接口
  • authSchema: 必填。HTTP 认证方式,可选值有 BASIC,DIGEST,BEARER

  • httpMethod:必填。请求第三方系统的请求方式,可选值有 GET,POST

  • loginUrl:必填。第三方系统提供的登录地址

  • authInfoField:必填。用户传入本系统的用户信息存放位置,可选值有 HEADER,PARAMS,BODY

  • customHeaders:非必填。自定义请求头,请求第三方系统时携带

  • customParams:非必填。自定义请求参数,请求第三方系统时携带

  • customBody:非必填。自定义请求体,请求第三方系统时携带。会将 Map 中 的键值对以 json 的方式拼接为 json 字符串之后当作请求体

  • bearerTokenIssueUrl: 当 authSchema 为 BEARER 时必填。 Bearer Token 的签发请求地址

  • requestBodyToJapUserStrategy:当 authInfoField 为 BODY 时必填。这个字段用于指定从 RequestBody 解析出 JapUser 的 username 和 password 的策略。提供默认实现:以 json 的方式解析出 username 和 password

  • forBearerTokenEnum:当 authSchema 为 BEARER 时必填。Bearer 认证预请求方式,这个是用来指定在进行 Token 签发时用户信息如何发送到第三方。可选值有 BY_HEADER,BY_PARAMS,BY_BODY,BY_BASIC,BY_DIGEST

  • getTokenFromResponseStrategy:当 authSchema 为 BEARER 时必填。这个字段用于指定从 Resposne 中解析出 token 的策略。提供默认实现:以 json 的方式解析出 token。

# 官方推荐

  • ⨳ jap-http-api 前后端分离项目示例:jap-http-api-demo (opens new window)
编辑 (opens new window)
#jap-http-api#Basic#Digest#Bearer
Last Updated: 2021/10/09, 22:47:39
使用jap-mfa
使用jap-ldap

← 使用jap-mfa 使用jap-ldap→

最近更新
01
经验总结:关于为 JAP 开发不同语言的 Demo 的总结
11-02
02
jap-spring-boot-starter 使用帮助
10-28
03
使用jap-ldap
10-25
更多文章>
Theme by Vdoing | Copyright © 2021-2022

友情链接:UniAdmin | 江如意的博客

Copyright © 2021-2040 FUJIE. All rights reserved. 北京符节科技有限公司版权所有 | 京ICP备2020044519号-4
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式