Commit fba728e6 authored by 李超鹏's avatar 李超鹏

调整认证方式

parent 4c313f61
Pipeline #7454 canceled with stages
package cc.shenjiying.ai;
import io.smallrye.common.annotation.Blocking;
import jakarta.ws.rs.ApplicationPath;
import jakarta.ws.rs.core.Application;
import org.eclipse.microprofile.openapi.annotations.Components;
......@@ -44,6 +45,6 @@ import org.eclipse.microprofile.openapi.annotations.tags.Tag;
)
)
@Blocking
public class SimpleApplication extends Application {
}
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);
}
package cc.shenjiying.ai.common.dto;
import cc.shenjiying.ai.config.QuestionerHolder;
import cc.shenjiying.ai.repository.entity.Questioner;
import lombok.Data;
import lombok.experimental.Accessors;
......@@ -14,4 +16,10 @@ public class AuthInfo {
private String mobile;
private String channel;
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());
}
}
......@@ -3,6 +3,8 @@ package cc.shenjiying.ai.config.filters;
import cc.shenjiying.ai.common.dto.AuthInfo;
import cc.shenjiying.ai.common.dto.R;
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.repository.entity.Questioner;
import cc.shenjiying.ai.util.IpUtils;
......@@ -12,6 +14,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import io.quarkus.logging.Log;
import io.quarkus.runtime.util.StringUtil;
import io.smallrye.jwt.auth.principal.JWTParser;
import io.smallrye.mutiny.Uni;
import io.vertx.core.http.HttpServerRequest;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
......@@ -23,6 +26,7 @@ import org.jboss.resteasy.reactive.RestResponse;
import org.jboss.resteasy.reactive.server.ServerRequestFilter;
import org.jboss.resteasy.reactive.server.ServerResponseFilter;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
......@@ -35,13 +39,17 @@ import static cc.shenjiying.ai.config.QuestionerHolder.TOKEN_KEY;
// 返回 null or empty 代表继续执行链,其他则返回给客户端
@ApplicationScoped
public class TokenFilter {
@Inject
JWTParser jwtParser;
@Inject
ObjectMapper objectMapper;
@Inject
QuestionerService questionerService;
@Inject
ChannelTokenService channelTokenService;
private List<String> ignoreUrl = Arrays.asList("/questioner/login", "/questioner/login/code");
private boolean isIgnore(String url) {
......@@ -50,7 +58,37 @@ public class TokenFilter {
@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);
channel = StringUtil.isNullOrEmpty(channel) ? "qs" : "";
String token = context.getHeaderString(TOKEN_KEY);
......
package cc.shenjiying.ai.dto;
import lombok.Data;
@Data
public class QuickSearchResponse {
private int code;
private String msg;
private VipInfoDTO data;
}
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;
}
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;
}
}
......@@ -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.verify-host=false
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
quarkus.datasource.db-kind=mysql
quarkus.datasource.username=sts
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment