浏览代码

Graphql提交

tags/B.2.6.4_20240106_base
yk 1年前
父节点
当前提交
b90ffe5dc0
共有 14 个文件被更改,包括 255 次插入40 次删除
  1. +6
    -0
      xueyi-common/xueyi-common-security/src/main/java/com/xueyi/common/security/interceptor/HeaderInterceptor.java
  2. +1
    -1
      xueyi-common/xueyi-common-web/src/main/java/com/xueyi/common/web/config/WebApiMvcConfig.java
  3. +3
    -0
      xueyi-common/xueyi-common-web/src/main/java/com/xueyi/common/web/interceptor/ApiRequestInterceptor.java
  4. +5
    -8
      xueyi-modules/xueyi-system/pom.xml
  5. +64
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/intercepts/GraphqlRequestFilter.java
  6. +41
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/graphql/VisitorGraphQLMutationResolver.java
  7. +9
    -11
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/graphql/VisitorGraphQLQuery.java
  8. +92
    -0
      xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/graphql/config/GraphQLConfig.java
  9. +0
    -13
      xueyi-modules/xueyi-system/src/main/resources/graphql/result.graphql
  10. +0
    -4
      xueyi-modules/xueyi-system/src/main/resources/graphql/root.graphql
  11. +12
    -0
      xueyi-modules/xueyi-system/src/main/resources/graphql/root.graphqls
  12. +11
    -0
      xueyi-modules/xueyi-system/src/main/resources/graphql/visitRecords.graphqls
  13. +0
    -3
      xueyi-modules/xueyi-system/src/main/resources/graphql/visitor.graphql
  14. +11
    -0
      xueyi-modules/xueyi-system/src/main/resources/graphql/visitor.graphqls

+ 6
- 0
xueyi-common/xueyi-common-security/src/main/java/com/xueyi/common/security/interceptor/HeaderInterceptor.java 查看文件

@@ -3,6 +3,7 @@ package com.xueyi.common.security.interceptor;
import com.xueyi.common.core.constant.basic.SecurityConstants;
import com.xueyi.common.core.constant.basic.TenantConstants;
import com.xueyi.common.core.context.SecurityContextHolder;
import com.xueyi.common.core.utils.JwtUtil;
import com.xueyi.common.core.utils.ServletUtil;
import com.xueyi.common.core.utils.core.ObjectUtil;
import com.xueyi.common.core.utils.core.StrUtil;
@@ -43,6 +44,11 @@ public class HeaderInterceptor implements AsyncHandlerInterceptor {

System.err.println(SecurityUtils.getAccountType());
if (StrUtil.isNotEmpty(token)) {
SecurityContextHolder.setEnterpriseId(JwtUtil.getEnterpriseId(token));
SecurityContextHolder.setSourceName(JwtUtil.getSourceName(token));
SecurityContextHolder.setAccountType(JwtUtil.getAccountType(token));
SecurityContextHolder.set(SecurityConstants.FROM_SOURCE, SecurityConstants.INNER);

TenantConstants.AccountType accountType = TenantConstants.AccountType.getByCode(SecurityUtils.getAccountType());
if(ObjectUtil.isNotNull(accountType)) {
AuthUtil.verifyLoginUserExpire(token, accountType);


+ 1
- 1
xueyi-common/xueyi-common-web/src/main/java/com/xueyi/common/web/config/WebApiMvcConfig.java 查看文件

@@ -24,7 +24,7 @@ public class WebApiMvcConfig implements WebMvcConfigurer {
System.err.println("WebMvcConfig.addInterceptors======================hshshkbb");

registry.addInterceptor(getApiInterceptor())
.addPathPatterns("/8888")
.addPathPatterns("/**/graphql/**")
// .addPathPatterns("/**")
.excludePathPatterns(excludeUrls)
.order(1);


+ 3
- 0
xueyi-common/xueyi-common-web/src/main/java/com/xueyi/common/web/interceptor/ApiRequestInterceptor.java 查看文件

@@ -42,6 +42,9 @@ public class ApiRequestInterceptor implements HandlerInterceptor {
String deviceId = request.getHeader("deviceId");
logger.info("请求头参数:deviceId={}", deviceId);

String token = request.getHeader("Authorization");
logger.info("请求头参数:Authorization={}", token);

/* String str = DecodeRequestUtils.getRequestPostStr(request);

logger.info("请求参数:{}", str);


+ 5
- 8
xueyi-modules/xueyi-system/pom.xml 查看文件

@@ -138,12 +138,13 @@
</dependency>

<dependency>
<groupId>com.graphql-java</groupId>
<artifactId>graphql-java</artifactId>
<version>11.0</version>
<groupId>com.graphql-java-kickstart</groupId>
<artifactId>graphql-spring-boot-starter</artifactId>
<version>14.0.0</version>
</dependency>



<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
@@ -151,11 +152,7 @@
</dependency>


<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-miniapp</artifactId>
<version>4.6.0</version>
</dependency>



</dependencies>


+ 64
- 0
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/intercepts/GraphqlRequestFilter.java 查看文件

@@ -0,0 +1,64 @@
package com.xueyi.system.intercepts;

import com.xueyi.common.core.constant.basic.SecurityConstants;
import com.xueyi.common.core.context.SecurityContextHolder;
import com.xueyi.common.core.utils.JwtUtil;
import com.xueyi.common.security.service.TokenService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
* @author yk
* @description
* @date 2024-01-04 22:40
*/

@Component
public class GraphqlRequestFilter extends OncePerRequestFilter {
Logger logger = LoggerFactory.getLogger(GraphqlRequestFilter.class);

@Override
protected void doFilterInternal(
HttpServletRequest request,
HttpServletResponse response,
FilterChain filterChain
) throws ServletException, IOException {

// 获取请求路径
String requestURI = request.getRequestURI();
logger.info("Request URI: {}", requestURI);

// 判断是否是 GraphQL 请求
if (requestURI != null && requestURI.contains("/graphql")) {
String token = request.getHeader("Authorization");



logger.info("token: {}", token);
token = token.replace("Bearer ", "");
logger.error("enterpriseId: {}, sourceName:{}, enterpriseName:{}, accountType:{}", JwtUtil.getEnterpriseId(token), JwtUtil.getSourceName(token), JwtUtil.getEnterpriseName(token), JwtUtil.getAccountType(token));
SecurityContextHolder.setEnterpriseId(JwtUtil.getEnterpriseId(token));
SecurityContextHolder.setSourceName(JwtUtil.getSourceName(token));
SecurityContextHolder.setAccountType(JwtUtil.getAccountType(token));
SecurityContextHolder.set(SecurityConstants.FROM_SOURCE, SecurityConstants.INNER);
logger.error("getAccountType:{}",SecurityContextHolder.getAccountType());
logger.info("Authorization: {}", token);
// 在这里进行鉴权等处理
// ...

// 继续处理 GraphQL 请求
filterChain.doFilter(request, response);
} else {
// 不是 GraphQL 请求,继续处理其他请求
filterChain.doFilter(request, response);
}
}
}

+ 41
- 0
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/graphql/VisitorGraphQLMutationResolver.java 查看文件

@@ -0,0 +1,41 @@
package com.xueyi.system.staff.graphql;

import com.xueyi.system.api.digitalmans.domain.dto.DmVisitorsDto;
import com.xueyi.system.api.digitalmans.domain.po.DmVisitorsPo;
import com.xueyi.system.staff.domain.model.DmVisitorsConverter;
import com.xueyi.system.staff.mapper.DmVisitorsMapper;
import graphql.kickstart.tools.GraphQLMutationResolver;
import graphql.kickstart.tools.GraphQLQueryResolver;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.stream.Collectors;

/*
* @author yk
* @description
* @date 2023-12-25 19:55
*/

@Component
class VisitorGraphQLMutationResolver implements GraphQLMutationResolver {
@Autowired
private DmVisitorsMapper mapper;

@Autowired
private DmVisitorsConverter converter;

public Boolean update(Long id, String phone, String name, String nickName){
DmVisitorsPo dto = mapper.selectById(id);
if (dto == null) return null;
dto.setPhone(phone);
dto.setNickname(nickName);
dto.setName(name);
return mapper.updateById(dto) > 0;
}

public Boolean delete(Long id){
return mapper.deleteById(id) > 0;
}
}

+ 9
- 11
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/graphql/VisitorGraphQLQuery.java 查看文件

@@ -1,24 +1,23 @@
/*
package com.xueyi.system.staff.graphql;

import com.coxautodev.graphql.tools.GraphQLQueryResolver;
import com.xueyi.system.api.digitalmans.domain.dto.DmVisitorsDto;
import com.xueyi.system.api.digitalmans.domain.po.DmVisitorsPo;
import com.xueyi.system.staff.domain.model.DmVisitorsConverter;
import com.xueyi.system.staff.mapper.DmVisitorsMapper;
import graphql.kickstart.tools.GraphQLQueryResolver;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.stream.Collectors;

*/
/**
/*
* @author yk
* @description
* @date 2023-12-25 19:55
*//*
*/

@Service
@Component
class VisitorGraphQLQueryResolver implements GraphQLQueryResolver {
@Autowired
private DmVisitorsMapper mapper;
@@ -26,12 +25,11 @@ class VisitorGraphQLQueryResolver implements GraphQLQueryResolver {
@Autowired
private DmVisitorsConverter converter;

public DmVisitorsPo findOneVisitor(Long id){
return mapper.selectById(id);
public DmVisitorsDto selectOne(Long id){
return converter.mapperDto(mapper.selectById(id));
}

public List<DmVisitorsPo> getVisitorList(){
public List<DmVisitorsDto> list(){
return mapper.selectList(null).stream().map(t->converter.mapperDto(t)).collect(Collectors.toList());
}
}
*/

+ 92
- 0
xueyi-modules/xueyi-system/src/main/java/com/xueyi/system/staff/graphql/config/GraphQLConfig.java 查看文件

@@ -0,0 +1,92 @@
package com.xueyi.system.staff.graphql.config;

import graphql.ExecutionResult;
import graphql.GraphQL;
import graphql.GraphQLContext;
import graphql.execution.instrumentation.ExecutionStrategyInstrumentationContext;
import graphql.execution.instrumentation.InstrumentationContext;
import graphql.execution.instrumentation.parameters.InstrumentationExecuteOperationParameters;
import graphql.execution.instrumentation.parameters.InstrumentationExecutionParameters;
import graphql.execution.instrumentation.parameters.InstrumentationExecutionStrategyParameters;
import graphql.execution.instrumentation.parameters.InstrumentationFieldFetchParameters;
import graphql.execution.instrumentation.parameters.InstrumentationFieldParameters;
import graphql.execution.instrumentation.parameters.InstrumentationValidationParameters;
import graphql.kickstart.autoconfigure.tools.GraphQLJavaToolsAutoConfiguration;
import graphql.kickstart.execution.instrumentation.NoOpInstrumentationProvider;
import graphql.kickstart.tools.GraphQLResolver;
import graphql.kickstart.tools.SchemaParser;
import graphql.language.Document;
import graphql.scalars.ExtendedScalars;
import graphql.schema.GraphQLSchema;
import graphql.schema.idl.RuntimeWiring;
import graphql.validation.ValidationError;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import graphql.execution.instrumentation.Instrumentation;

import java.util.List;

/**
* @author yk
* @description
* @date 2024-01-04 22:03
*/
@Configuration
@Import(GraphQLJavaToolsAutoConfiguration.class)
public class GraphQLConfig {

@Bean
public GraphQL graphQL(List<GraphQLResolver<?>> resolvers, List<SchemaParser> schemaParsers, GraphQLSchema graphQLSchema) {
return GraphQL.newGraphQL(graphQLSchema)
.instrumentation(new SimpleAuthInstrumentation())
.build();
}

private static class SimpleAuthInstrumentation implements Instrumentation {
Logger logger = LoggerFactory.getLogger(SimpleAuthInstrumentation.class);

@Override
public InstrumentationContext<ExecutionResult> beginExecution(InstrumentationExecutionParameters parameters) {
return null;
}

@Override
public InstrumentationContext<Document> beginParse(InstrumentationExecutionParameters parameters) {
return null;
}

@Override
public InstrumentationContext<List<ValidationError>> beginValidation(InstrumentationValidationParameters parameters) {
return null;
}

@Override
public InstrumentationContext<ExecutionResult> beginExecuteOperation(InstrumentationExecuteOperationParameters parameters) {
GraphQLContext context = parameters.getExecutionContext().getGraphQLContext();

// 从上下文中获取请求头中的token
String token = context.get("Authorization");
logger.error("token: {}", token);
return null;
}


@Override
public ExecutionStrategyInstrumentationContext beginExecutionStrategy(InstrumentationExecutionStrategyParameters parameters) {
return null;
}

@Override
public InstrumentationContext<ExecutionResult> beginField(InstrumentationFieldParameters parameters) {
return null;
}

@Override
public InstrumentationContext<Object> beginFieldFetch(InstrumentationFieldFetchParameters parameters) {
return null;
}
}
}

+ 0
- 13
xueyi-modules/xueyi-system/src/main/resources/graphql/result.graphql 查看文件

@@ -1,13 +0,0 @@
schema {
query: Query
mutation: Mutation
}

type Query{

}


type Mutation{

}

+ 0
- 4
xueyi-modules/xueyi-system/src/main/resources/graphql/root.graphql 查看文件

@@ -1,4 +0,0 @@
type R{
code: Int!
msg: String
}

+ 12
- 0
xueyi-modules/xueyi-system/src/main/resources/graphql/root.graphqls 查看文件

@@ -0,0 +1,12 @@
scalar Long
scalar DateTime

type Query {
selectOne(id: Long): DmVisitorsDto
list: [DmVisitorsDto]
# queryVisitList: [DmVisitRecordsDto]
}
type Mutation {
update(id: Long, phone: String, name: String, nickName: String): Boolean
delete(id: Long): Boolean
}

+ 11
- 0
xueyi-modules/xueyi-system/src/main/resources/graphql/visitRecords.graphqls 查看文件

@@ -0,0 +1,11 @@

type DmVisitRecordsDto {
id: String
visitorId: Long
userId: Long
receiverName: String
receiverPhone: String
recordStatus: Int
visitDate: DateTime
visitorCode: String
}

+ 0
- 3
xueyi-modules/xueyi-system/src/main/resources/graphql/visitor.graphql 查看文件

@@ -1,3 +0,0 @@
extend type Query{
getVisitorList()
}

+ 11
- 0
xueyi-modules/xueyi-system/src/main/resources/graphql/visitor.graphqls 查看文件

@@ -0,0 +1,11 @@


type DmVisitorsDto {
id: String
age: String
name: String
phone: String
type: Int
visitorCompany: String
avatar: String
}

正在加载...
取消
保存