为伟大的事业捐躯,从来就不能算作失败。——拜伦
项目地址:https://gitee.com/baomidou/shaun
主要依托 pac4j-jwt
来提供默认使用 JWT
的 WEB 安全组件
优点
- 迅速集成,只需要少量配置+代码即可实现基本的接口防护
- 默认使用
jwt
进行身份认证
- 灵活的
jwt
配置,默认签名
+加密
- 更多高级功能只需实现对应接口并注入到
spring
容器内
- 本框架各类均不会使用
session
(pac4j
提供的类除外)
- 前后端不分离下,能依托
pac4j
的各种client
快速集成三方登录(redirect
跳转那种),例如oauth
(qq
,微信) 和 cas
。
- 引入
GAV
1 2 3 4 5
| <dependency> <groupId>com.baomidou</groupId> <artifactId>shaun-spring-boot-starter</artifactId> <version>1.2</version> </dependency>
|
- 配置 application.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| shaun: salt: 32位字符串,不配置则每次启动不一样导致重启前登录的用户token失效 stateless: false session-on: false login-url: /admin/login token-location: header_or_cookie exclude-path: - /articleInfo/page exclude-branch: - /css - /js - /layui - /favicon - /error - /login expire-time:
|
更多 yml
配置点此查看
- 编写登陆代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| import com.baomidou.shaun.core.mgt.SecurityManager;
@Service public class LoginServiceImpl implements LoginService {
@Autowired private SecurityManager securityManager;
@Override @Transactional public String login() { // 登录成功后把用户角色权限信息存储到profile中 final TokenProfile profile = new TokenProfile(); profile.setId(userId.toString()); //profile.addRole(role:String); //profile.setRoles(roles:Set); //profile.addPermission(permission:String); //profile.setPermissions(permissions:Set); //profile.addAttribute("key","value"); final String token = securityManager.login(profile); //如果选择token存cookie里,securityManager.login会进行自动操作 return token; }
|
- 注解权限拦截:
1
| @HasAuthorization` , `@HasPermission` , `@HasRole
|
支持注解在method
上以及class
上
例:
1 2
| @HasPermission(value = {"add", "edit"}, logical = Logical.BOTH) //权限必须同时存在 @HasPermission(value = {"add", "edit"}, logical = Logical.ANY) //权限任一存在(默认)
|
- 如何获取用户信息(不需要安全拦截的接口获取不到哦)
1
| TokenProfile profile = ProfileHolder.getProfile();
|
前端如果是web
端,使用cookie
就可以,如果是app
等,也可以使用header
带token
注意默认token
的key
为Authorization