账户中心-SpringBoot集成工具

xielq b092912b2c init from phab 4 سال پیش
src b092912b2c init from phab 4 سال پیش
Readme.md b092912b2c init from phab 4 سال پیش
build.gradle b092912b2c init from phab 4 سال پیش
settings.gradle b092912b2c init from phab 4 سال پیش

Readme.md

集成身份认证

功能

适用于spring boot项目,实现接口拦截与身份信息获取

使用方法

Gradle依赖

compile "com.uas.account:sso-integration:1.2.4-SNAPSHOT"
// 如果添加了@EnableSignature,且需要基于数据库获取企业信息
compile "org.springframework.boot:spring-boot-starter-jdbc"
// 按实际数据库类型(Oracle、MySQL、PostgreSQL)引入
compile "com.oracle:ojdbc6:11.2.0"

添加配置注入

// 基于cookie身份标识uid识别用户认证信息
@EnableSSOToken
// 基于企业唯一标识uu及签名串识别企业身份信息
@EnableSignature
public class MyApplication {}

添加sso配置

# 以下是完整配置,请依实际情况选择配置
    sso:
      app: b2b                        # 可不填
      breakOnError: true              # 默认值true
      urlIncludes:                    # 拦截的url,可不填,默认全部拦截
        - /api/**
        - /openapi/**
      urlExcludes:                    # 忽略的url,可不填
        - /
        - /public/**
      token:
        cookieName: uid               # 默认值uid
        secretKey: 0taQcW073Z7G628g5H # 统一私钥
        setCookieUri: /set_cookie     # 默认值/set_cookie,回调写cookie的URI,会有拦截器自行处理,无需自定义请求
        clearCookieUri: /clear_cookie # 默认值/clear_cookie,回调删除cookie的URI,会有拦截器自行处理,无需自定义请求
        logoutUri: /sso_logout        # 默认值/sso_logout,本地退出的默认实现
      sign:
        idParam: access_id            # 默认值access_id
        signParam: _signature         # 默认值_signature
      # 如果是基于Oracle数据库获取信息,添加下面的配置
      # 注意,下面只是示例,请按实际数据库配置
      datasource:
        url: jdbc:oracle:thin:@10.10.100.200:1521:orcl
        driverClassName: oracle.jdbc.driver.OracleDriver
        username: myuser
        password: mypass
      # 如果是基于账户中心接口获取信息,添加下面的配置
      # 注意,下面只是示例,请按实际接口配置
      api:
        # 获取企业信息
        getUserspace: https://sso.ubtob.com/api/userspace/info/spaceUU?spaceUU={uu}
        # 获取用户信息
        getUser: https://sso.ubtob.com/api/user/info?userUU={uu}
        # 获取用户绑定企业
        getUserspaces: https://sso.ubtob.com/api/user/getSpace?mobile={mobile}
        # 如果配置了该选项,在未登录情况下跳转
        login: https://sso.ubtob.com/?returnURL={returnURL}&appId={appId}&baseUrl={baseUrl}set_cookie
        # 如果配置了该选项,在执行完本地登出后,跳转该地址执行同步登出
        logout: https://sso.ubtob.com/logquit?returnURL={returnURL}&appId={appId}&baseUrl={baseUrl}clear_cookie

使用

    @RequestMapping({"/", "/sso"})
    public ResponseEntity test() {
        // 使用 SSO.get() 或 UserAccount.get()
        return ResponseEntity.ok(SSO.get());
    }

拓展自己的验证方式

    @EnableSSOToken
    @EnableSignature
    public class MySSOConfig {

        @Bean
        public MySSORepository mySSORepository() {
            // 实现了SSORepository的bean会自动添加到SSO拦截链
            // 只要一个验证通过获取到UserView即可
            return new MySSORepository();
        }

        public static class MySSORepository implements SSORepository {
            @Override
            public UserAccount getUser(HttpServletRequest request) throws ServletException, IOException {
                // TODO
                return null;
            }
        }

    }

场景举例

获取登录信息

    @EnableSSOToken
    @RestController
    public class MyApplication {

        // 注意要配置sso.api.getUserspaces等
        @Autowired
        private UserService userService;

        @RequestMapping("/userinfo")
        public ResponseEntity test() {
            UserAccount user = UserAccount.get();
            // 当前登录用户
            ModelMap map = new ModelMap("user", user);
            // 用户全部企业
            map.addAttribute("list", userService.getSpaces(user));
            return ResponseEntity.ok(map);
        }

    }