基于 pac4j 的安全框架
模块简介:
引入shaun-spring-boot-starter。
com.baomidou shaun-spring-boot-starter ${version}
登录后设置相关信息到SecurityManager。
@Service @AllArgsConstructor public class LoginServiceImpl implements LoginService {
private final SecurityManager securityManager; @Override @Transactional public String login() { // 登录成功后把用户角色权限信息存储到profile中 final JwtProfile profile = new JwtProfile(); profile.setId(userId.toString()); if (roles.contains(AdminConst.SUPER_ADMIN)) { isAdmin = true; } else { profile.setPermissions(permissionService.selectPermissionsByUserId(userId).stream() .filter(x -> Objects.nonNull(x.getCode())).map(SysPermission::getCode).collect(Collectors.toSet())); profile.setRoles(new HashSet<>(roles)); } final String token = securityManager.login(profile, isAdmin); return token; }
设置yml启动信息。
shaun: salt: d614a4fdff6540c1a5b730afc5f9cc8f #非必须 exclude-path: - /v2/api-docs - /swagger-resources - /doc.html exclude-branch: - /wechat-auth - /webjars
注解拦截。
类似于shiro,shaun也默认支持使用注解在controller上拦截。
相关的注解有 @HasAuthorization @HasPermission @HasRole 。
@HasAuthorization
@HasPermission
@HasRole
@HasPermission(value = {"add","edit"},logical = Logical.BOTH) //同时存在 @HasPermission(value = {"add","edit"},logical = Logical.ANY) //任一存在
默认配置下 前端登录后需要把后端返回的token存下,后续接口的请求头带上Authorization。
后端可以通过 TokenProfile profile = ProfileHolder.getProfile(); 获得用户信息。