摘要:如果全部使用默认值的情况话不需要做任何配置方式前提项目需要添加数据源依赖。获取通过获取启用在使用格式化时非常简单的,配置如下所示开启转换转换时所需加密,默认为恒宇少年于起宇默认不启用,签名建议进行更换。
ApiBoot是一款基于SpringBoot1.x,2.x的接口服务集成基础框架, 内部提供了框架的封装集成、使用扩展、自动化完成配置,让接口开发者可以选着性完成开箱即用, 不再为搭建接口框架而犯愁,从而极大的提高开发效率。
引入 ApiBoot Security Oauth在pom.xml配置文件内添加如下:
org.minbox.framework api-boot-starter-security-oauth-jwt
ApiBoot所提供的依赖都不需要添加版本号,但是需要添加版本依赖,具体查看ApiBoot版本依赖配置参数列表
ApiBoot在整合SpringSecurity、Oauth2时把配置参数进行了分离,配置列表如下所示:
整合SpringSecurity配置列表配置名称 | 介绍 | 默认值 | 生效方式 |
---|---|---|---|
api.boot.security.away | SpringSecurity读取用户的方式,默认为内存方式 | memory | all |
api.boot.security.auth-prefix | 拦截的接口路径前缀,如:/api/users就会被默认拦截 | /api/** | memory/jdbc |
api.boot.security.users | 配置用户列表,具体使用查看内存方式介绍 | 无 | memory |
api.boot.security.ignoring-urls | Spring Security所排除的路径,默认排除Swagger、Actuator相关路径前缀 | /v2/api-docs /swagger-ui.html /swagger-resources/configuration/security /META-INF/resources/webjars/ /swagger-resources /swagger-resources/configuration/ui /actuator/ |
memory/jdbc |
api.boot.security.enable-default-store-delegate | 仅在Jdbc方式生效 | true | jdbc |
配置名称 | 介绍 | 默认值 | 绑定away |
---|---|---|---|
api.boot.oauth.away | Oauth存储Token、读取Client信息方式 | memory | all |
api.boot.oauth.cleint-id | Oauth2 Client ID | ApiBoot | memory |
api.boot.oauth.client-secret | Oauth2 Client Secret | ApiBootSecret | memory |
api.boot.oauth.grant-types | 客户端授权方式 | Srtring[]{"password"} | memory |
api.boot.oauth.scopes | 客户端作用域 | String[]{"api"} | memory |
api.boot.oauth.jwt.enable | 是否启用JWT格式化AccessToken | false | memory/jdbc |
api.boot.oauth.jwt.sign-key | 使用JWT格式化AccessToken时的签名 | ApiBoot | memory/jdbc |
ApiBoot在整合SpringSecurity、Oauth2时配置进行了分离,也就意味着我们可以让SpringSecurity读取内存用户、Oauth2将生成的AccessToken存放到数据库,当然反过来也是可以的,相互不影响!!!
内存方式(默认方式) Spring SecurityApiBoot在整合Spring Security的内存方式时,仅仅需要配置api.boot.security.users用户列表参数即可,就是这么的简单,
配置用户示例如下所示:
api: boot: security: # Spring Security 内存方式用户列表示例 users: - username: hengboy password: 123456 - username: apiboot password: abc321
api.boot.security.users是一个List
如果全部使用默认值的情况话不需要做任何配置!!!
Jdbc方式前提:项目需要添加数据源依赖。Spring Security
默认用户表
ApiBoot在整合Spring Security的Jdbc方式时,在使用ApiBoot提供的默认结构用户表时只需要修改api.boot.security.away: jdbc即可,ApiBoot提供的用户表结构如下所示:
CREATE TABLE `api_boot_user_info` ( `UI_ID` int(11) NOT NULL AUTO_INCREMENT COMMENT "用户编号,主键自增", `UI_USER_NAME` varchar(30) DEFAULT NULL COMMENT "用户名", `UI_NICK_NAME` varchar(50) DEFAULT NULL COMMENT "用户昵称", `UI_PASSWORD` varchar(255) DEFAULT NULL COMMENT "用户密码", `UI_EMAIL` varchar(30) DEFAULT NULL COMMENT "用户邮箱地址", `UI_AGE` int(11) DEFAULT NULL COMMENT "用户年龄", `UI_ADDRESS` varchar(200) DEFAULT NULL COMMENT "用户地址", `UI_IS_LOCKED` char(1) DEFAULT "N" COMMENT "是否锁定", `UI_IS_ENABLED` char(1) DEFAULT "Y" COMMENT "是否启用", `UI_STATUS` char(1) DEFAULT "O" COMMENT "O:正常,D:已删除", `UI_CREATE_TIME` timestamp NULL DEFAULT current_timestamp() COMMENT "用户创建时间", PRIMARY KEY (`UI_ID`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT="ApiBoot默认的用户信息表";
自定义用户表
如果你的系统已经存在了自定义用户表结构,ApiBoot是支持的,而且很简单就可以完成整合,我们需要先修改api.boot.security.enable-default-store-delegate参数为false,如下所示:
api: boot: security: # Spring Security jdbc方式用户列表示例 enable-default-store-delegate: false away: jdbc
添加ApiBootStoreDelegate接口实现类,如下所示:
@Component public class DisableDefaultUserTableStoreDelegate implements ApiBootStoreDelegate { @Autowired private PasswordEncoder passwordEncoder; /** * 用户列表示例 * 从该集合内读取用户信息 * 可以使用集合内的用户获取access_token */ static Listusers = new ArrayList() { { add("api-boot"); add("hengboy"); add("yuqiyu"); } }; /** * 根据用户名查询用户信息 * * @param username 用户名 * @return * @throws UsernameNotFoundException */ @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { if (!users.contains(username)) { throw new UsernameNotFoundException("用户:" + username + "不存在"); } return new DisableDefaultUserDetails(username); } @Data @AllArgsConstructor @NoArgsConstructor class DisableDefaultUserDetails implements UserDetails { private String username; @Override public Collection extends GrantedAuthority> getAuthorities() { return new ArrayList() { { add((GrantedAuthority) () -> "ROLE_USER"); } }; } /** * 示例密码使用123456 * * @return */ @Override public String getPassword() { return passwordEncoder.encode("123456"); } @Override public String getUsername() { return username; } @Override public boolean isAccountNonExpired() { return true; } @Override public boolean isAccountNonLocked() { return true; } @Override public boolean isCredentialsNonExpired() { return true; } @Override public boolean isEnabled() { return true; } } }
根据上面代码示例,我们可以通过users用户列表进行访问获取access_token。
Oauth2创建Oauth所需表结构
Oauth2如果使用Jdbc方式进行存储access_token、client_details时,需要在数据库内初始化Oauth2所需相关表结构,oauth-mysql.sql
添加客户端数据
初始化Oauth2表结构后,需要向oauth_client_details表内添加一个客户端信息,下面是对应ApiBoot Security Oauth配置信息的数据初始化,如下所示:
INSERT INTO `oauth_client_details` VALUES ("ApiBoot","api","$2a$10$M5t8t1fHatAj949RCHHB/.j1mrNAbxIz.mOYJQbMCcSPwnBMJLmMK","api","password",NULL,NULL,7200,7200,NULL,NULL);
AppSecret加密方式统一使用BCryptPasswordEncoder,数据初始化时需要注意。
在上面memory/jdbc两种方式已经配置完成,接下来我们就可以获取access_token。
获取AccessToken 通过CURL获取➜ ~ curl ApiBoot:ApiBootSecret@localhost:8080/oauth/token -d "grant_type=password&username=api-boot&password=123456" {"access_token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NTMxMDk1MjMsInVzZXJfbmFtZSI6ImFwaS1ib290IiwiYXV0aG9yaXRpZXMiOlsiUk9MRV9VU0VSIl0sImp0aSI6IjBmZTUyY2RlLTBhZjctNDI1YS04Njc2LTFkYTUyZTA0YzUxYiIsImNsaWVudF9pZCI6IkFwaUJvb3QiLCJzY29wZSI6WyJhcGkiXX0.ImqGZssbDEOmpf2lQZjLQsch4ukE0C4SCYJsutfwfx0","token_type":"bearer","expires_in":42821,"scope":"api","jti":"0fe52cde-0af7-425a-8676-1da52e04c51b"}启用JWT
ApiBoot Security Oauth在使用JWT格式化access_token时非常简单的,配置如下所示:
api: boot: oauth: jwt: # 开启Jwt转换AccessToken enable: true # 转换Jwt时所需加密key,默认为ApiBoot sign-key: 恒宇少年 - 于起宇
默认不启用JWT,sign-key签名建议进行更换。
本章源码地址:https://github.com/hengboy/api-boot/tree/master/api-boot-samples/api-boot-sample-security-oauth-jwt
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/74053.html
摘要:相关配置配置参数参数介绍默认值是否启用文档标题快速集成文档文档描述通过自动化配置快速集成文档,仅需一个注解一个依赖即可。注意通过所获取的类型都为。 ApiBoot是一款基于SpringBoot1.x,2.x的接口服务集成基础框架, 内部提供了框架的封装集成、使用扩展、自动化完成配置,让接口开发者可以选着性完成开箱即用, 不再为搭建接口框架而犯愁,从而极大...
摘要:是一款基于的接口服务集成基础框架,内部提供了框架的封装集成,让接口开发者完成开箱即用,不再为搭建接口框架而犯愁,从而极大的提高开发效率。 ApiBoot是一款基于SpringBoot1.x、SpringBoot2.x的接口服务集成基础框架,内部提供了框架的封装集成,让接口开发者完成开箱即用,不再为搭建接口框架而犯愁,从而极大的提高开发效率。通过在我的SpringBoot系列教程中得到的...
摘要:顾名思义,是用于数据源选择切换的框架,这是一款基于切面指定注解实现的,通过简单的数据源注解配置就可以完成访问时的自动切换,切换过程中是线程安全的。注意事项在使用时需要添加对应数据库的依赖如果使用连接池,不要配置使用的依赖,请使用依赖。 ApiBoot是一款基于SpringBoot1.x,2.x的接口服务集成基础框架, 内部提供了框架的封装集成、使用扩展、自动化完成配置,...
摘要:如下所示不配置默认使用自定义是的概念,用于自定义转换实现,比如自定义格式化日期自动截取小数点等。下面提供一个的简单示例,具体的使用请参考官方文档。 ApiBoot是一款基于SpringBoot1.x,2.x的接口服务集成基础框架, 内部提供了框架的封装集成、使用扩展、自动化完成配置,让接口开发者可以选着性完成开箱即用, 不再为搭建接口框架而犯愁,从而极大...
摘要:注意如果你的方法返回对象只有一个资源对象需要映射,可以单独配置使用注解。集合资源加载返回值为集合的示例类型作为返回值时,其中注意必须是对象类型。如果你有想要的使用方式,你就可以提交 ApiBoot Resource Load ApiBoot Resource Load是一款资源与业务完全分离的基础框架,可以整合微服务(Feign、OpenFeign)进行负载均衡读取固定类型、固定所属业...
阅读 1353·2021-09-10 10:51
阅读 2828·2019-08-30 15:54
阅读 3367·2019-08-29 17:11
阅读 925·2019-08-29 16:44
阅读 1390·2019-08-29 13:47
阅读 1085·2019-08-29 13:47
阅读 1484·2019-08-29 12:23
阅读 1037·2019-08-28 18:18