UMS (user manage scaffolding) 用户管理脚手架: github gitee
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/b822b0c53007004217fa8e6a8562eb03.png#pic_center)
用户管理脚手架集成:用户密码登录、手机登录、支持所有 JustAuth 支持的第三方授权登录、验证码、基于 RBAC 的 uri 访问权限控制功能、签到等功能。
通过配置文件与实现 用户服务 与 短信发生服务 两个 API 接口就可以实现上述功能,实现快速开发,只需要专注于业务逻辑。
![ums-arch](https://i-blog.csdnimg.cn/blog_migrate/2a58a4eff0e9bdbe750dcea8bc702b90.png)
一、UMS 功能列表
:
- 验证码(图片,短信, 滑块)校验功能。
- 手机登录功能,登录后自动注册。
- 支持所有 JustAuth 支持的第三方授权登录,登录后自动注册或绑定。
- 支持定时刷新 accessToken, 支持分布式定时任务。
- 支持第三方授权登录的用户信息表与 token 信息表的缓存功能。
- 支持第三方绑定与解绑及查询接口(top.dcenter.ums.security.core.oauth.repository.UsersConnectionRepository).
- 访问权限控制功能。
- 简化 session、remember me、csrf 等配置。
- 根据设置的响应方式(JSON 与 REDIRECT)返回 json 或 html 数据。
- 签到功能。
模块功能
模块 |
功能 |
core |
验证码/用户名密码登录/手机登录且自动注册/OAuth2 login by JustAuth/访问权限控制/签到/简化HttpSecurity(session、remember me、csrf 等)配置/session redis 缓存/可配置的响应方式(JSON 与 REDIRECT)返回 json 或 html 数据 |
demo |
basic-example/basic-detail-example/permission-example/quickStart/session-detail-example/social-simple-example/social-detail-example/validate-codi-example |
demo 演示功能
二、maven
:
<dependency>
<groupId>top.dcenter</groupId>
<artifactId>ums-core-spring-boot-starter</artifactId>
<version>2.0.2</version>
</dependency>
三、TODO List
:
-
- 准备基于 spring-security5.4 添加 JWT, OAuth2 authenticate server
四、快速开始
:
1. 添加依赖:
<dependency>
<groupId>top.dcenter</groupId>
<artifactId>ums-core-spring-boot-starter</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
<version>2.3.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.3.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.8.1</version>
</dependency>
2. config:
server:
port: 9090
spring:
profiles:
active: dev
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/ums?useSSL=false&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai
username: root
password: 123456
session:
store-type: none
timeout: PT300s
thymeleaf:
encoding: utf-8
prefix: classpath:/templates/
suffix: .htm
servlet:
content-type: text/html;charset=UTF-8
ums:
oauth:
enabled: true
github:
client-id: 4d4ee00e82f669f2ea8d
client-secret: 953ddbe871a08d6924053531e89ecc01d87195a8
gitee:
client-id: dcc38c801ee88f43cfc1d5c52ec579751c12610c37b87428331bd6694056648e
client-secret: e60a110a2f6e7c930c2d416f802bec6061e19bfa0ceb0df9f6b182b05d8f5a58
auth-login-url-prefix: /auth2/authorization
redirect-url-prefix: /auth2/login
domain: http://localhost:9090
proxy:
timeout: PT3S
foreign-timeout: PT150S
client:
login-process-type: redirect
login-page: /login
failure-url: /login
success-url: /
logout-url: /logout
logout-success-url: /login
ignoring-urls:
- /static/**
permit-urls:
- /hello:GET
- /login
usernameParameter: username
passwordParameter: password
codes:
image:
auth-urls:
- /authentication/form
request-param-image-code-name: imageCode
sms:
auth-urls:
- /authentication/mobile
request-param-mobile-name: mobile
request-param-sms-code-name: smsCode
mobile:
login:
sms-code-login-is-open: true
login-processing-url-mobile: /authentication/mobile
sign:
charset: UTF_8
sign-key-prefix: 'u:sign:'
total-sign-key-prefix: 'total:sign:'
last-few-days: 7
total-expired: 5356800
user-expired: 2678400
---
spring:
profiles: dev
mvc:
throw-exception-if-no-handler-found: true
thymeleaf:
cache: false
server:
port: 9090
servlet:
context-path: /demo
3. 实现 UmsUserDetailsService 接口等:
UserDetailsService.java
package top.dcenter.ums.security.core.demo.service;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import me.zhyd.oauth.model.AuthUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserCache;
import org.springframework.security.core.userdetails