# shaun **Repository Path**: quickthinking/shaun ## Basic Information - **Project Name**: shaun - **Description**: 基于pac4j的安全框架 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 75 - **Created**: 2020-03-09 - **Last Updated**: 2024-06-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

一个基于pac4j的安全框架

# 特性: 1. 功能简单,易于集成。 2. 无 session。 3. 使用凭证(token) 进行身份验证(默认是 jwt)。 4. 前后端不分离下,能依托pac4j的各种client快速集成三方登录(redirect跳转那种),例如oauth(qq,微信) 和 cas。 # 模块简介 - shaun-core: 核心包。 - shaun-spring-boot-starter: spring boot 快速启动包。 - shaun-test-cookie: 前后端不分离下的测试演示。 - shaun-test-stateless-cookie: 前后端分离下使用cookie存token的测试演示。 - shaun-test-stateless-header: 前后端分离下使用request header携带token的测试演示。 # 使用方法 1. 引入shaun-spring-boot-starter。 ```xml com.baomidou shaun-spring-boot-starter ${version} ``` 2. 登录后设置相关信息到SecurityManager。 ```java @Service @AllArgsConstructor public class LoginServiceImpl implements LoginService { private final SecurityManager securityManager; @Override @Transactional public String login() { // 登录成功后把用户角色权限信息存储到profile中 final TokenProfile profile = new TokenProfile(); profile.setId(userId.toString()); //profile.setRoles(roles); //profile.setPermissions(permissions); //profile.addAttribute("key","value"); final String token = securityManager.login(profile); return token; } ``` 3. 设置yml启动信息。 ```yaml shaun: salt: 32位字符串,非必须字段 exclude-path: # 排除具体的路径 - /v2/api-docs - /swagger-resources - /doc.html exclude-branch: # 排除以此路径开头 - /webjars expire-time: '1d' # 不设置默认永久有效 # jwt 超时时间 10s : 表示10秒有效 # 10m 结尾: 表示10分钟有效 # 10h 结尾: 表示10小时有效 # 1d : 表示有效时间到第二天 00:00:00 # 2d1h : 表示有效时间到第二天 01:00:00 # d 后面 只支持上面三个(`s`,`m`,`h`)之一 ``` 4. 注解拦截。 类似于shiro,shaun也默认支持使用注解在controller上拦截。 相关的注解有 `@HasAuthorization` `@HasPermission` `@HasRole` 。 ```java @HasPermission(value = {"add","edit"},logical = Logical.BOTH) //权限必须同时存在 @HasPermission(value = {"add","edit"},logical = Logical.ANY) //权限任一存在 ``` 5. 前后端交互。 默认配置下 前端登录后需要把后端返回的token存下,后续接口的请求头带上Authorization。 后端可以通过 TokenProfile profile = ProfileHolder.getProfile(); 获得登录设置进去的用户信息。 如获得登录设置进token里的用户ID继续进行业务逻辑处理。 如 `Long id= ProfileHolder.getProfile().getId();`