基于 pac4j 的安全框架 shaun

Apache
Java
跨平台
2020-01-16
青苗

【年终提升】2019尾声,来 OSC·年终盛典收割技术干货,get新技能!>>>

基于 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。
<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>shaun-spring-boot-starter</artifactId>
  <version>${version}</version>
</dependency>
  1. 登录后设置相关信息到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;
    }
  1. 设置yml启动信息。
shaun:
  salt: d614a4fdff6540c1a5b730afc5f9cc8f #非必须
  exclude-path:
    - /v2/api-docs
    - /swagger-resources
    - /doc.html
  exclude-branch:
    - /wechat-auth
    - /webjars
  1. 注解拦截。

类似于shiro,shaun也默认支持使用注解在controller上拦截。

相关的注解有 @HasAuthorization @HasPermission @HasRole 。

@HasPermission(value = {"add","edit"},logical = Logical.BOTH) //同时存在
@HasPermission(value = {"add","edit"},logical = Logical.ANY)  //任一存在
  1. 前后端交互。

默认配置下 前端登录后需要把后端返回的token存下,后续接口的请求头带上Authorization。

后端可以通过 TokenProfile profile = ProfileHolder.getProfile(); 获得用户信息。

 

的码云指数为
超过 的项目
加载中

评论(2)

l
lanjerry
ଘ_ଘ哇 ଘ_ଘ哇 ଘ_ଘ哇 ଘ_ଘ哇 ଘ_ଘ哇
渐行0渐远
渐行0渐远
ଘ_ଘ哇 ଘ_ଘ哇 ଘ_ଘ哇 ଘ_ଘ哇 ଘ_ଘ哇

暂无资讯

暂无问答

数据结构-08-集合(Set)-哈希表(Hash)-图(Map)

##Set Set 是一种用于保存**不重复元素**的数据结构。常被用作测试归属性,故其查找的性能十分重要。 Set 是python自带的基本数据结构, 有多种初始化方式。 Python的set跟dict的Implementat...

2016/06/17 14:02
298
0
数据结构-01-字符串(String)

>本笔记都是用python来演示数据结构和算法的示例,万变不离其宗,其他语言的数据结构和算法的思想都是相同的,只不过是换了一种表现方式而已。 ###String String实际开发也经常用到,这里总结...

2016/06/16 23:29
35
0
一些资源

一些资源 发表于 2012 年 12 月 07 日 由 windflyer ELF文件格式 1. ELF文件格式分析 http://os.pku.edu.cn:8080/gaikuang/submission/TN05.ELF.Format.Summary.pdf 2. Executable and Link...

2012/12/20 10:01
30
0
Boots turn into common, comfy

Boots turn into common, comfy becom buyers' initial decision. Personality is youngers' seek out. The aim of champion between popular brand names just began. Who locate the new s...

2015/07/07 10:27
6
0
Lovie Johnson: Buccaneers' crime 'not necessarily

Lovie Johnson: Buccaneers' crime 'not necessarily ready

2014/10/14 11:26
10
0
使用CSS3的appearance属性改变元素的外观

前段时间在《修复iPhone上submit按钮bug》中介绍了使用“-webkit-appearance: none; ”来改变按钮在iPhone下的默认风格,其实我们可以反过来思路,使用“appearance”属性,来改变任何元素的...

2015/04/08 18:31
115
0
使用CSS3的appearance属性改变元素的外观

前段时间在《修复iPhone上submit按钮bug》中介绍了使用“-webkit-appearance: none; ”来改变按钮在iPhone下的默认风格,其实我们可以反过来思路,使用“appearance”属性,来改变任何元素的...

2012/09/13 09:12
110
0
OSChina 周一乱弹 —— 你女朋友的变形术还没修炼

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @xiaoshiyue :#今日歌曲推荐# 分享DVBBS/Shaun Frank/Delaney Jane的单曲《LA LA LAND (Extended Mix)》 《LA LA LAND (Extended Mix)》- D...

2019/05/27 08:11
2.1W
4
came to a basic agreemen

came to a basic agreemen

2015/04/21 14:10
4
0
CSS3的appearance属性--改变元素的外观

CSS3 appearance 属性 CSS 参考手册 实例 使 div 元素看上去像一个按钮: div { appearance:button; -moz-appearance:button; /* Firefox */ -webkit-appearance:button; /* Safari 和 ...

2015/05/30 13:40
20
0

没有更多内容

加载失败,请刷新页面

返回顶部
顶部