# 集成身份认证 功能 ------------- 适用于spring boot项目,实现接口拦截与身份信息获取 使用方法 ------------- > Gradle依赖 ``` compile "com.uas.account:sso-integration:1.1.13-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://account.ubtob.com/api/userspace/{uu} # 获取用户全部账户 getAccounts: https://account.ubtob.com/api/user/all?mobile={mobile} # 如果配置了该选项,在未登录情况下跳转 login: https://account.ubtob.com/sso/login?returnURL={returnURL}&appId={appId}&baseUrl={baseUrl}set-cookie # 如果配置了该选项,在执行完本地登出后,跳转该地址执行同步登出 logout: https://account.ubtob.com/sso/logout?returnURL={returnURL}&appId={appId} ``` > 使用 ``` @RequestMapping({"/", "/sso"}) public ResponseEntity test() { // 使用 SSO.get() 或 UserView.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 UserView getUser(HttpServletRequest request) throws ServletException, IOException { // TODO return null; } } } ``` # 场景举例 > 获取登录信息 ``` @EnableSSOToken @RestController public class MyApplication { // 注意要配置sso.api.getAccounts等 @Autowired private UserService userService; @RequestMapping("/userinfo") public ResponseEntity test() { UserView user = UserView.get(); // 当前登录用户 ModelMap map = new ModelMap("user", user); // 用户全部账户 map.addAttribute("list", userService.getAllAccounts(user.getUid())); return ResponseEntity.ok(map); } } ```