Pig项目新加权限类型生成Token并且解决验证问题

前言

这个教程可能不是最好的,也许是最直白的,你只需要找到对应的地方跟着博主一起去修改就能操作成功,今天用添加 mini 的授权模式的例子说一下这个 mini 模式是自己自定义的,你想叫什么都行

最近可烦死了快被折磨死人,在昨天睡了一觉,今天就解决问题了…睡一觉就能解决问题,那我为啥要花这么多时间呢???

正文

步骤一

首先你得去找一下 Pig 开发文档的官网https://www.yuque.com/pig4cloud/pig/gg3ndm,找到官网之后如果你也想向博主一样去修改这个,你可以去找到目录下的认证授权,并且把下面的pig 生成 token (认证)详解pig 校验 token (鉴权)详解这两个解说看完就行,但是这个看了如果你之前有做过类似的估计很容易看懂.这个文档只是让你便于理解.这步是让你以后有需求可以知道去哪找

Pig项目新加权限类型生成Token并且解决验证问题_第1张图片

步骤二

先去新增一个客户端的 ClientId 和 ClientKey,在 pig 数据库去执行下面这句 Sql

INSERT INTO `sys_oauth_client_details` (`client_id`,`resource_ids`,`client_secret`,`scope`,`authorized_grant_types`,`web_server_redirect_uri`,`authorities`,`access_token_validity`,`refresh_token_validity`,`additional_information`,`autoapprove`) VALUES ('mini',NULL,'mini','server','mini,refresh_token',NULL,NULL,10000,11111111,'','true');

上面这句 Sql 的意思就是新增了一个 clientId 为 mini,clientSecret 也为 mini,并且授权类型为 mini 和 refresh_token这里面的refresh_token的授权模式原来已经有了我们就不做处理了,我们要新加一个叫 mini 的授权模式,并且获取的参数也要更改

步骤三:添加 mini 授权模式

搞完这个之后你就可以直接打开你下载的 Pig 项目我们先去修改文档里面提到的权限认证也就是Auth 模块,这个模块就是进行权限认证的,所有逻辑都在里面,我们可以进行修改,在这里我们要新增一个 mini 的授权模式

Pig项目新加权限类型生成Token并且解决验证问题_第2张图片

我们可以看到在他这个项目的结构的 support 目录下已经写好了两个授权模式,一个就是官方自己用的 password 授权模式,另外一个就是 sms 短信验证模式,我们这个图片里面已经有了 mini 模式,这个是我已经加过的,我们只需要新建一个 mini 的软件包,然后assword 包下的三个类给全部复制到我们先建的 mini 包下.然后再对里面的参数进行修改就行,首先就是修改类名打开前两个类

Pig项目新加权限类型生成Token并且解决验证问题_第3张图片

首先就是把这个给修改了,下面的也以此类推,就是更改授权模式,我就是把那些授权的字段给封转到一个类里面了,我自定义的类长下面这个样子

Pig项目新加权限类型生成Token并且解决验证问题_第4张图片

步骤四:修改 mini 授权参数

咱们接着往下走,把下面图片里面标记的都给改了,主要就是更改授权模式

Pig项目新加权限类型生成Token并且解决验证问题_第5张图片

去更改第二个类,第二个类就是修改 mini 授权模式的授权访问参数,也就是请求参数,我们只需要去修改下面图片里的标记的地方就行,我这里接受的参数就是 code,所以就写了 code 参数,如果不知道填啥,就去另外的授权模式里面看看,他怎么设置请求参数的

Pig项目新加权限类型生成Token并且解决验证问题_第6张图片

做完这些你就已经添加了一个 mini 的授权模式,现在你需要去用一个对象来接收这个授权模式的请求

步骤五:新建一个 MiniUserDetilServiceImpl 对象

首先找到这个pig-common模块,在这个模块下找到pig-common-security我们在这个模块的 service 软件包下直接复制标记的那个类,然后修改一下名字就行

Pig项目新加权限类型生成Token并且解决验证问题_第7张图片

主要就是修改下面图片里圈起来的,第一个圈起来的就是查询用户的方式,然后赋值给一个他自己封装用户对象,第二个圈起来的就是验证授权方式,这两个改好我们就完成了一个生成 token 的类,并且可以在第一个框里面写上查询你的需要接入用户的查询逻辑

Pig项目新加权限类型生成Token并且解决验证问题_第8张图片

我们写好这个,得让 IOC 来管理他,让请求自动进入到你写的逻辑里面,这里 Pig 做了处理,我不知道他还做了哪些,所以还是按照他的方法让 IOC 来管理你的类.找到pig-common-security模块的 resources 文件夹,在里面找到 META-INF/spring 文件夹,然后打开 org.springframework.boot.autoconfigure.AutoConfiguration.imports 这个文件,在里面加入我们创建的授权模式接收对象就好了,我也不知道怎么形容,就这样叫吧

Pig项目新加权限类型生成Token并且解决验证问题_第9张图片

做到这里,我们已经加了一个授权模式,又加了一个授权模式的接收对象,做完这些我们还需要做一些操作,需要再判断我们是哪个请求,不要被拦截下来

步骤六:处理 mini 授权模式生成 token 过程中的验证

我们需要找到pig-auth模块下的 com/pig4cloud/pig/auth/support/core 软件包下的 PigDaoAuthenticationProvider.java 类,在这里我们要加上我们的第一个排除,排除验证密码

Pig项目新加权限类型生成Token并且解决验证问题_第10张图片

第二个排除,我们找到pig-gateway模块,找到 com/pig4cloud/pig/gateway/filter 包下的 PasswordDecoderFilter.java 和 ValidateCodeGatewayFilter.java 两个类,我们需要排除密码解密和验证码校验,如果你的用户有密码需求的话可以保留,按着下面图片里圈起来的写上就行,两个都一样.

Pig项目新加权限类型生成Token并且解决验证问题_第11张图片

做完这些我们就可以生成 token 了下面发一下测试的返回数据

{
   "sub": "XSSQ",
   "clientId": "mini",
   "iss": "https://xxxx",
   "token_type": "Bearer",
   "access_token": "bcb6b4a5-72ef-4bbe-b78f-861cccbec85b",
   "refresh_token": "xxmWRkZ58T4HI2pEEU4KfZ434R3DJzYKf-Lyr8w9xmdnGD4_P_6MmMzfr-IO79H8yQcrJbnLzjlkg9Yzs8z-jzr8QThhEmcSvtpwFd18dsHkUwyZKMuMaGvMaM5-4SVW",
   "aud": [
       "custom"
   ],
   "license": "https://xxxx",
   "nbf": 1685415720.223000000,
   "user_info": {
       "password": null,
       "username": "XSSQ",
       "authorities": [],
       "accountNonExpired": true,
       "accountNonLocked": true,
       "credentialsNonExpired": true,
       "enabled": true,
       "attributes": {},
       "id": "4444444",
       "deptId": null,
       "phone": null,
       "name": "XSSQ"
   },
   "scope": [
       "server"
   ],
   "exp": 1685425720.223000000,
   "expires_in": 9999,
   "iat": 1685415720.223000000,
   "jti": "39453712-b1b5-4a2a-b20e-3d8b63000b4f"
}

步骤七:处理 mini 授权模式解析 token 过程的验证

直接找到pig-common模块下的pig-common-security模块,在这个模块下找到com/pig4cloud/pig/common/security/component软件包下的PigCustomOpaqueTokenIntrospector.java类进行修改里面的具体内容,如果不做这个操作就会在使用的时候返回,用户不存在的错误,我们配置好下面这个图片之后就能正常解析 token,我们也可以在里面写上解析 token 的业务逻辑

Pig项目新加权限类型生成Token并且解决验证问题_第12张图片

做完这些整个的权限认证就结束了,从刚开始的新加一个权限标识符,到新加权限的类型,还有客户端模式,这一套走下来比较复杂,不过不难理解

后记

小问题:

如果在生成token的时候报了一个客户端Id未授权,那我们就去找一下Auth模块下的我们自己新加的那个mini软件包下的xxxxxAuthenticationProvider.java类,把里面的checkClient给直接返回true就行或者不做任何处理也行,我是直接把这个抛出异常的动作给删掉了

Pig项目新加权限类型生成Token并且解决验证问题_第13张图片

后言:

如果我的博客帮助到了你,你可以我的博客https://blog.csdn.net/weixin_57228276或者微信公众号搜索幸识SQ,可以找到我,里面也有更多的优秀文章

你可能感兴趣的:(java,java-ee,maven)