步骤一
首先你得去找一下 Pig 开发文档的官网https://www.yuque.com/pig4cloud/pig/gg3ndm
,找到官网之后如果你也想向博主一样去修改这个,你可以去找到目录下的认证授权,并且把下面的pig 生成 token (认证)详解和pig 校验 token (鉴权)详解这两个解说看完就行,但是这个看了如果你之前有做过类似的估计很容易看懂.这个文档只是让你便于理解.这步是让你以后有需求可以知道去哪找
步骤二
先去新增一个客户端的 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 的授权模式
我们可以看到在他这个项目的结构的 support 目录下已经写好了两个授权模式,一个就是官方自己用的 password 授权模式,另外一个就是 sms 短信验证模式,我们这个图片里面已经有了 mini 模式,这个是我已经加过的,我们只需要新建一个 mini 的软件包,然后assword 包下的三个类给全部复制到我们先建的 mini 包下.然后再对里面的参数进行修改就行,首先就是修改类名打开前两个类
首先就是把这个给修改了,下面的也以此类推,就是更改授权模式,我就是把那些授权的字段给封转到一个类里面了,我自定义的类长下面这个样子
步骤四:修改 mini 授权参数
咱们接着往下走,把下面图片里面标记的都给改了,主要就是更改授权模式
去更改第二个类,第二个类就是修改 mini 授权模式的授权访问参数,也就是请求参数,我们只需要去修改下面图片里的标记的地方就行,我这里接受的参数就是 code,所以就写了 code 参数,如果不知道填啥,就去另外的授权模式里面看看,他怎么设置请求参数的
做完这些你就已经添加了一个 mini 的授权模式,现在你需要去用一个对象来接收这个授权模式的请求
步骤五:新建一个 MiniUserDetilServiceImpl 对象
首先找到这个pig-common
模块,在这个模块下找到pig-common-security
我们在这个模块的 service 软件包下直接复制标记的那个类,然后修改一下名字就行
主要就是修改下面图片里圈起来的,第一个圈起来的就是查询用户的方式,然后赋值给一个他自己封装用户对象,第二个圈起来的就是验证授权方式,这两个改好我们就完成了一个生成 token 的类,并且可以在第一个框里面写上查询你的需要接入用户的查询逻辑
我们写好这个,得让 IOC 来管理他,让请求自动进入到你写的逻辑里面,这里 Pig 做了处理,我不知道他还做了哪些,所以还是按照他的方法让 IOC 来管理你的类.找到pig-common-security
模块的 resources 文件夹,在里面找到 META-INF/spring 文件夹,然后打开 org.springframework.boot.autoconfigure.AutoConfiguration.imports 这个文件,在里面加入我们创建的授权模式接收对象就好了,我也不知道怎么形容,就这样叫吧
做到这里,我们已经加了一个授权模式,又加了一个授权模式的接收对象,做完这些我们还需要做一些操作,需要再判断我们是哪个请求,不要被拦截下来
步骤六:处理 mini 授权模式生成 token 过程中的验证
我们需要找到pig-auth
模块下的 com/pig4cloud/pig/auth/support/core 软件包下的 PigDaoAuthenticationProvider.java 类,在这里我们要加上我们的第一个排除,排除验证密码
第二个排除,我们找到pig-gateway
模块,找到 com/pig4cloud/pig/gateway/filter 包下的 PasswordDecoderFilter.java 和 ValidateCodeGatewayFilter.java 两个类,我们需要排除密码解密和验证码校验,如果你的用户有密码需求的话可以保留,按着下面图片里圈起来的写上就行,两个都一样.
做完这些我们就可以生成 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 的业务逻辑
做完这些整个的权限认证就结束了,从刚开始的新加一个权限标识符,到新加权限的类型,还有客户端模式,这一套走下来比较复杂,不过不难理解