Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
A
ai-chat-agent
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
李超鹏
ai-chat-agent
Commits
fba728e6
Commit
fba728e6
authored
Dec 26, 2023
by
李超鹏
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
调整认证方式
parent
4c313f61
Pipeline
#7454
canceled with stages
Changes
8
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
126 additions
and
3 deletions
+126
-3
SimpleApplication.java
src/main/java/cc/shenjiying/ai/SimpleApplication.java
+2
-1
QuickSearchApi.java
src/main/java/cc/shenjiying/ai/client/QuickSearchApi.java
+19
-0
AuthInfo.java
src/main/java/cc/shenjiying/ai/common/dto/AuthInfo.java
+8
-0
TokenFilter.java
...ain/java/cc/shenjiying/ai/config/filters/TokenFilter.java
+40
-2
QuickSearchResponse.java
src/main/java/cc/shenjiying/ai/dto/QuickSearchResponse.java
+11
-0
VipInfoDTO.java
src/main/java/cc/shenjiying/ai/dto/VipInfoDTO.java
+16
-0
ChannelTokenService.java
...in/java/cc/shenjiying/ai/manager/ChannelTokenService.java
+25
-0
application.properties
src/main/resources/application.properties
+5
-0
No files found.
src/main/java/cc/shenjiying/ai/SimpleApplication.java
View file @
fba728e6
package
cc
.
shenjiying
.
ai
;
package
cc
.
shenjiying
.
ai
;
import
io.smallrye.common.annotation.Blocking
;
import
jakarta.ws.rs.ApplicationPath
;
import
jakarta.ws.rs.ApplicationPath
;
import
jakarta.ws.rs.core.Application
;
import
jakarta.ws.rs.core.Application
;
import
org.eclipse.microprofile.openapi.annotations.Components
;
import
org.eclipse.microprofile.openapi.annotations.Components
;
...
@@ -44,6 +45,6 @@ import org.eclipse.microprofile.openapi.annotations.tags.Tag;
...
@@ -44,6 +45,6 @@ import org.eclipse.microprofile.openapi.annotations.tags.Tag;
)
)
)
)
@Blocking
public
class
SimpleApplication
extends
Application
{
public
class
SimpleApplication
extends
Application
{
}
}
src/main/java/cc/shenjiying/ai/client/QuickSearchApi.java
0 → 100644
View file @
fba728e6
package
cc
.
shenjiying
.
ai
.
client
;
import
cc.shenjiying.ai.dto.QuickSearchResponse
;
import
jakarta.ws.rs.GET
;
import
jakarta.ws.rs.Path
;
import
org.eclipse.microprofile.rest.client.annotation.RegisterClientHeaders
;
import
org.eclipse.microprofile.rest.client.inject.RegisterRestClient
;
import
org.jboss.resteasy.reactive.RestQuery
;
@RegisterRestClient
(
configKey
=
"qs"
)
@Path
(
"/anno/api"
)
@RegisterClientHeaders
(
KnowLedgeRequestHeaderFactory
.
class
)
public
interface
QuickSearchApi
{
@GET
@Path
(
"/vip"
)
QuickSearchResponse
getVip
(
@RestQuery
(
"token"
)
String
token
);
}
src/main/java/cc/shenjiying/ai/common/dto/AuthInfo.java
View file @
fba728e6
package
cc
.
shenjiying
.
ai
.
common
.
dto
;
package
cc
.
shenjiying
.
ai
.
common
.
dto
;
import
cc.shenjiying.ai.config.QuestionerHolder
;
import
cc.shenjiying.ai.repository.entity.Questioner
;
import
lombok.Data
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
lombok.experimental.Accessors
;
...
@@ -14,4 +16,10 @@ public class AuthInfo {
...
@@ -14,4 +16,10 @@ public class AuthInfo {
private
String
mobile
;
private
String
mobile
;
private
String
channel
;
private
String
channel
;
private
String
channelUserId
;
private
String
channelUserId
;
public
static
AuthInfo
formQuestioner
(
Questioner
questioner
)
{
return
new
AuthInfo
().
setNickname
(
questioner
.
getAccount
()).
setId
((
questioner
.
getId
())).
setAccount
(
questioner
.
getAccount
())
.
setMobile
(
questioner
.
getMobile
()).
setChannel
(
questioner
.
getChannel
()).
setChannelUserId
(
questioner
.
getChannelUserId
());
}
}
}
src/main/java/cc/shenjiying/ai/config/filters/TokenFilter.java
View file @
fba728e6
...
@@ -3,6 +3,8 @@ package cc.shenjiying.ai.config.filters;
...
@@ -3,6 +3,8 @@ package cc.shenjiying.ai.config.filters;
import
cc.shenjiying.ai.common.dto.AuthInfo
;
import
cc.shenjiying.ai.common.dto.AuthInfo
;
import
cc.shenjiying.ai.common.dto.R
;
import
cc.shenjiying.ai.common.dto.R
;
import
cc.shenjiying.ai.config.QuestionerHolder
;
import
cc.shenjiying.ai.config.QuestionerHolder
;
import
cc.shenjiying.ai.dto.VipInfoDTO
;
import
cc.shenjiying.ai.manager.ChannelTokenService
;
import
cc.shenjiying.ai.manager.QuestionerService
;
import
cc.shenjiying.ai.manager.QuestionerService
;
import
cc.shenjiying.ai.repository.entity.Questioner
;
import
cc.shenjiying.ai.repository.entity.Questioner
;
import
cc.shenjiying.ai.util.IpUtils
;
import
cc.shenjiying.ai.util.IpUtils
;
...
@@ -12,6 +14,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
...
@@ -12,6 +14,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import
io.quarkus.logging.Log
;
import
io.quarkus.logging.Log
;
import
io.quarkus.runtime.util.StringUtil
;
import
io.quarkus.runtime.util.StringUtil
;
import
io.smallrye.jwt.auth.principal.JWTParser
;
import
io.smallrye.jwt.auth.principal.JWTParser
;
import
io.smallrye.mutiny.Uni
;
import
io.vertx.core.http.HttpServerRequest
;
import
io.vertx.core.http.HttpServerRequest
;
import
jakarta.enterprise.context.ApplicationScoped
;
import
jakarta.enterprise.context.ApplicationScoped
;
import
jakarta.inject.Inject
;
import
jakarta.inject.Inject
;
...
@@ -23,6 +26,7 @@ import org.jboss.resteasy.reactive.RestResponse;
...
@@ -23,6 +26,7 @@ import org.jboss.resteasy.reactive.RestResponse;
import
org.jboss.resteasy.reactive.server.ServerRequestFilter
;
import
org.jboss.resteasy.reactive.server.ServerRequestFilter
;
import
org.jboss.resteasy.reactive.server.ServerResponseFilter
;
import
org.jboss.resteasy.reactive.server.ServerResponseFilter
;
import
java.time.LocalDateTime
;
import
java.util.Arrays
;
import
java.util.Arrays
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Objects
;
import
java.util.Objects
;
...
@@ -35,13 +39,17 @@ import static cc.shenjiying.ai.config.QuestionerHolder.TOKEN_KEY;
...
@@ -35,13 +39,17 @@ import static cc.shenjiying.ai.config.QuestionerHolder.TOKEN_KEY;
// 返回 null or empty 代表继续执行链,其他则返回给客户端
// 返回 null or empty 代表继续执行链,其他则返回给客户端
@ApplicationScoped
@ApplicationScoped
public
class
TokenFilter
{
public
class
TokenFilter
{
@Inject
@Inject
JWTParser
jwtParser
;
JWTParser
jwtParser
;
@Inject
@Inject
ObjectMapper
objectMapper
;
ObjectMapper
objectMapper
;
@Inject
QuestionerService
questionerService
;
@Inject
ChannelTokenService
channelTokenService
;
private
List
<
String
>
ignoreUrl
=
Arrays
.
asList
(
"/questioner/login"
,
"/questioner/login/code"
);
private
List
<
String
>
ignoreUrl
=
Arrays
.
asList
(
"/questioner/login"
,
"/questioner/login/code"
);
private
boolean
isIgnore
(
String
url
)
{
private
boolean
isIgnore
(
String
url
)
{
...
@@ -50,7 +58,37 @@ public class TokenFilter {
...
@@ -50,7 +58,37 @@ public class TokenFilter {
@ServerRequestFilter
(
priority
=
2000
)
@ServerRequestFilter
(
priority
=
2000
)
public
RestResponse
<
String
>
request
(
ContainerRequestContext
context
,
@Context
HttpServerRequest
request
)
throws
JsonProcessingException
{
public
RestResponse
<
String
>
request
(
ContainerRequestContext
context
,
@Context
HttpServerRequest
request
)
throws
Exception
{
return
channelToken
(
request
);
// // h5 手机号登录 token认证
// return h5Token(context);
}
private
RestResponse
<
String
>
channelToken
(
HttpServerRequest
request
)
throws
JsonProcessingException
{
String
channel
=
request
.
getParam
(
FROM_CHANNEL_KEY
);
String
channelToken
=
request
.
getParam
(
TOKEN_KEY
);
VipInfoDTO
vip
=
channelTokenService
.
getVip
(
channel
,
channelToken
);
if
(
Objects
.
isNull
(
vip
)
||
vip
.
getVipTerminationTime
().
isBefore
(
LocalDateTime
.
now
()))
{
// 非会员提示不能使用
return
RestResponse
.
status
(
Response
.
Status
.
FORBIDDEN
,
objectMapper
.
writeValueAsString
(
R
.
fail
(
"非会员用户无法享受此功能,请考虑升级为会员。"
)));
}
Questioner
questioner
=
questionerService
.
getByChannel
(
channel
,
vip
.
getId
());
if
(
Objects
.
isNull
(
questioner
))
{
questioner
=
new
Questioner
().
setChannel
(
channel
).
setChannelUserId
(
vip
.
getId
()).
setAccount
(
vip
.
getUserName
()).
setCreateTime
(
LocalDateTime
.
now
())
.
setMobile
(
vip
.
getMobile
());
try
{
questionerService
.
save
(
questioner
);
}
catch
(
Exception
e
)
{
questioner
=
questionerService
.
getByChannel
(
channel
,
vip
.
getId
());
}
}
QuestionerHolder
.
putQuestioner
(
AuthInfo
.
formQuestioner
(
questioner
));
QuestionerHolder
.
putChannel
(
channel
);
return
null
;
}
private
RestResponse
<
String
>
h5Token
(
ContainerRequestContext
context
)
throws
JsonProcessingException
{
String
channel
=
context
.
getHeaderString
(
FROM_CHANNEL_KEY
);
String
channel
=
context
.
getHeaderString
(
FROM_CHANNEL_KEY
);
channel
=
StringUtil
.
isNullOrEmpty
(
channel
)
?
"qs"
:
""
;
channel
=
StringUtil
.
isNullOrEmpty
(
channel
)
?
"qs"
:
""
;
String
token
=
context
.
getHeaderString
(
TOKEN_KEY
);
String
token
=
context
.
getHeaderString
(
TOKEN_KEY
);
...
...
src/main/java/cc/shenjiying/ai/dto/QuickSearchResponse.java
0 → 100644
View file @
fba728e6
package
cc
.
shenjiying
.
ai
.
dto
;
import
lombok.Data
;
@Data
public
class
QuickSearchResponse
{
private
int
code
;
private
String
msg
;
private
VipInfoDTO
data
;
}
src/main/java/cc/shenjiying/ai/dto/VipInfoDTO.java
0 → 100644
View file @
fba728e6
package
cc
.
shenjiying
.
ai
.
dto
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
lombok.Data
;
import
java.time.LocalDateTime
;
@Data
public
class
VipInfoDTO
{
private
String
id
;
private
String
userName
;
private
String
mobile
;
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
private
LocalDateTime
vipTerminationTime
;
}
src/main/java/cc/shenjiying/ai/manager/ChannelTokenService.java
0 → 100644
View file @
fba728e6
package
cc
.
shenjiying
.
ai
.
manager
;
import
cc.shenjiying.ai.client.QuickSearchApi
;
import
cc.shenjiying.ai.dto.QuickSearchResponse
;
import
cc.shenjiying.ai.dto.VipInfoDTO
;
import
jakarta.enterprise.context.ApplicationScoped
;
import
jakarta.inject.Inject
;
import
org.eclipse.microprofile.rest.client.inject.RestClient
;
@ApplicationScoped
public
class
ChannelTokenService
{
@Inject
@RestClient
QuickSearchApi
quickSearchApi
;
public
VipInfoDTO
getVip
(
String
channel
,
String
token
)
{
QuickSearchResponse
response
=
quickSearchApi
.
getVip
(
token
);
if
(
response
.
getCode
()
==
0
)
{
return
response
.
getData
();
}
return
null
;
}
}
src/main/resources/application.properties
View file @
fba728e6
...
@@ -37,6 +37,11 @@ quarkus.rest-client.ai.url=http://115.159.4.244:7861
...
@@ -37,6 +37,11 @@ quarkus.rest-client.ai.url=http://115.159.4.244:7861
quarkus.rest-client.ai.scope
=
jakarta.inject.Singleton
quarkus.rest-client.ai.scope
=
jakarta.inject.Singleton
quarkus.rest-client.ai.verify-host
=
false
quarkus.rest-client.ai.verify-host
=
false
quarkus.rest-client.ai.follow-redirects
=
true
quarkus.rest-client.ai.follow-redirects
=
true
#\u5FEB\u67E5api
quarkus.rest-client.qs.url
=
https://api-qs.kaying.cc
quarkus.rest-client.qs.scope
=
jakarta.inject.Singleton
quarkus.rest-client.qs.verify-host
=
false
quarkus.rest-client.qs.follow-redirects
=
true
#\u6570\u636E\u5E93\u914D\u7F6E
#\u6570\u636E\u5E93\u914D\u7F6E
quarkus.datasource.db-kind
=
mysql
quarkus.datasource.db-kind
=
mysql
quarkus.datasource.username
=
sts
quarkus.datasource.username
=
sts
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment