# c-uaa-sdk-starter
**Repository Path**: ionehe/c-uaa-sdk-starter
## Basic Information
- **Project Name**: c-uaa-sdk-starter
- **Description**: 基于Spring security扩展,实现精确到接口级别的权限控制
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-10-27
- **Last Updated**: 2021-10-28
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# c-uaa-sdk-starter
> 基于Spring security的安全认证服务的框架支持,使用jwt作为认证token,实现精准的接口级权限控制
## 1 配置仓库
```xml
maven-releases
*
http://repo.ionehe.com/repository/maven-public/
maven-snapshots
*
http://repo.ionehe.com/repository/maven-public/
nexusProfile
nexus
Nexus Public Repository
http://repo.ionehe.com/repository/maven-public/
true
true
always
nexusProfile
```
## 2 maven配置
```text
com.ionehe.public
c-uaa-sdk-starter
1.0.0-SNAPSHOT
```
## 3 配置文件配置示例
### 3.1 application.yml jwt策略配置
```yaml
jwt:
tokenHeader: Authorization #JWT存储的请求头 (勿修改)
secret: demo-secret # 自定义JWT加解密使用的密钥
expiration: 604800 # 自定义JWT的超期限时间(60*60*24*7)
tokenHead: 'Bearer ' # JWT负载中拿到开头 (勿修改)
```
### 3.2 privilege.yml 匿名访问接口配置
```yaml
privilege:
# anonymous access 匿名可访问
anonymous:
- path: /swagger-ui.html
methods: post,get
- path: /swagger-resources/**
methods: post,get
- path: /swagger/**
methods: post,get
- path: /**/v2/api-docs
methods: post,get
- path: /webjars/springfox-swagger-ui/**
methods: post,get
- path: /login
methods: post
- path: /test/anonymous
methods: get
# anonymous access 登陆可访问
authentication:
- path: /test/authentication
methods: get
```
## 4 核心配置类PermissionsSecurityConfig.java
```java
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
@Slf4j
public class PermissionsSecurityConfig extends SecurityConfig {
@Autowired
private UserReadService userReadService;
/**
* 获取用户信息(用户名+用户权限集合)
*
* @return 返回一个用户对象给spring security进行认证鉴权
*/
@Bean
@Override
public UserDetailsService userDetailsService() {
return username -> userReadService.loadUserByUsername(username).getData();
}
/**
* TODO
* 加载需要鉴权的资源信息
*
* @return 需要鉴权的资源信息
*/
@Bean
public DynamicSecurityService dynamicSecurityService() {
return () -> {
// mock数据库录入的资源列表
List list = mockConfigAttributeMap();
log.info("PermissionsSecurityConfig[]resource:{}", list);
return list;
};
}
/**
* mock数据库录入的资源列表
*
* @return 资源列表
*/
private List mockConfigAttributeMap() {
List list = new ArrayList<>(2);
list.add(new org.springframework.security.access.SecurityConfig("/test/list"));
list.add(new org.springframework.security.access.SecurityConfig("/test/add"));
return list;
}
}
```
## 5 LoginController:登陆成功返回token,token中包含【用户名、token创建时间和过期时间】
```java
@Slf4j
@RestController
@RequestMapping("/login")
@Api(tags = "登陆服务", value = "登陆服务api")
public class LoginController {
@Autowired
private PasswordEncoder passwordEncoder;
@Autowired
private JwtTokenUtil jwtTokenUtil;
@Autowired
private UserReadService userReadService;
@ApiOperation("登陆成功后返回token")
@PostMapping
public Response