初始化
This commit is contained in:
parent
d4163cbeb3
commit
3fab56df80
|
|
@ -1,7 +1,5 @@
|
|||
package com.nflg.wms.admin.controller;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.nflg.wms.admin.service.MenuControllerService;
|
||||
import com.nflg.wms.common.pojo.ApiResult;
|
||||
import com.nflg.wms.common.pojo.PageData;
|
||||
|
|
@ -9,7 +7,6 @@ import com.nflg.wms.common.pojo.qo.*;
|
|||
import com.nflg.wms.common.pojo.vo.ApiVO;
|
||||
import com.nflg.wms.common.pojo.vo.MenuButtonVO;
|
||||
import com.nflg.wms.common.pojo.vo.MenuVO;
|
||||
import com.nflg.wms.repository.entity.DictionaryItem;
|
||||
import com.nflg.wms.starter.BaseController;
|
||||
import com.nflg.wms.starter.annotation.ApiMark;
|
||||
import jakarta.annotation.Resource;
|
||||
|
|
@ -17,7 +14,6 @@ import jakarta.validation.Valid;
|
|||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* 菜单管理
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package com.nflg.wms.admin.controller;
|
|||
import cn.dev33.satoken.sso.processor.SaSsoClientProcessor;
|
||||
import cn.dev33.satoken.stp.StpUtil;
|
||||
import com.nflg.wms.common.pojo.ApiResult;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
|
|
@ -10,6 +11,7 @@ import org.springframework.web.bind.annotation.RestController;
|
|||
* Sa-Token SSO
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/sso")
|
||||
public class SsoClientController {
|
||||
|
||||
// // 首页
|
||||
|
|
@ -26,7 +28,7 @@ public class SsoClientController {
|
|||
/**
|
||||
* 判断是否登录
|
||||
**/
|
||||
@RequestMapping("/sso/isLogin")
|
||||
@GetMapping("/isLogin")
|
||||
public ApiResult<Boolean> isLogin() {
|
||||
return ApiResult.success(StpUtil.isLogin());
|
||||
}
|
||||
|
|
@ -34,7 +36,7 @@ public class SsoClientController {
|
|||
/**
|
||||
* 返回SSO认证中心登录地址
|
||||
**/
|
||||
@RequestMapping("/sso/getLoginUrl")
|
||||
@GetMapping("/getLoginUrl")
|
||||
public ApiResult<String> getLoginUrl() {
|
||||
// String serverAuthUrl = SaSsoUtil.buildServerAuthUrl(clientLoginUrl, "");
|
||||
// return ApiResult.success(serverAuthUrl);
|
||||
|
|
|
|||
|
|
@ -10,8 +10,6 @@ import java.util.UUID;
|
|||
@Accessors(chain = true)
|
||||
public class LdapUserDTO {
|
||||
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 用户名
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ import java.util.stream.Collectors;
|
|||
* Sa-Token-SSO Server端
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/sso")
|
||||
public class SsoServerController {
|
||||
|
||||
private static final PasswordEncoder PASSWORDENCODER = new BCryptPasswordEncoder();
|
||||
|
|
@ -44,18 +45,10 @@ public class SsoServerController {
|
|||
private IUserRoleMapService userRoleMapService;
|
||||
|
||||
/**
|
||||
* 处理所有SSO相关请求
|
||||
* 登录
|
||||
*/
|
||||
@RequestMapping("/sso/*")
|
||||
public Object ssoRequest() {
|
||||
return SaSsoServerProcessor.instance.dister();
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理所有SSO相关请求
|
||||
*/
|
||||
@PostMapping("/sso/*")
|
||||
public Object ssoRequest1() {
|
||||
@PostMapping("/doLogin")
|
||||
public Object doLogin() {
|
||||
return SaSsoServerProcessor.instance.dister();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,11 +1,16 @@
|
|||
package com.nflg.wms.gateway;
|
||||
|
||||
import com.nflg.wms.repository.service.IUserService;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class AuthService {
|
||||
|
||||
@Resource
|
||||
private IUserService userService;
|
||||
|
||||
public boolean hasPermission(Long userId,String url) {
|
||||
return true;
|
||||
return userService.hasPermission(userId,url);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -12,26 +12,36 @@ import org.springframework.stereotype.Component;
|
|||
import org.springframework.web.server.ServerWebExchange;
|
||||
import reactor.core.publisher.Mono;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
@Component
|
||||
public class TraceIdFilter implements GlobalFilter, Ordered {
|
||||
|
||||
@Override
|
||||
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
|
||||
// 从请求头中获取 TraceId
|
||||
String traceId = exchange.getRequest().getHeaders().getFirst(Constant.TRACE_ID_HEADER);
|
||||
// 如果没有就生成新的
|
||||
if (StrUtil.isBlank(traceId)) {
|
||||
traceId = IdUtil.getSnowflakeNextIdStr();
|
||||
}
|
||||
// 将 TraceId 放入请求头中
|
||||
// 获取 TraceId
|
||||
String traceId = Optional.ofNullable(
|
||||
exchange.getRequest().getHeaders().getFirst(Constant.TRACE_ID_HEADER))
|
||||
.orElse(IdUtil.getSnowflakeNextIdStr());
|
||||
|
||||
// 构建新请求并注入 TraceId 到 header
|
||||
ServerHttpRequest mutatedRequest = exchange.getRequest().mutate()
|
||||
.header(Constant.TRACE_ID_HEADER, traceId)
|
||||
.build();
|
||||
// 将 TraceId 写入 MDC(用于日志)
|
||||
|
||||
// 设置 MDC(用于日志)
|
||||
MDC.put(Constant.TRACE_ID, traceId);
|
||||
// 清理 MDC 防止内存泄漏
|
||||
|
||||
// 继续过滤链
|
||||
return chain.filter(exchange.mutate().request(mutatedRequest).build())
|
||||
.doFinally(signalType -> MDC.remove(Constant.TRACE_ID));
|
||||
.contextWrite(ctx -> ctx.put(Constant.TRACE_ID, traceId))
|
||||
.doFinally(signalType -> {
|
||||
// 添加 traceId 到响应头(防止响应头已被提交)
|
||||
if (!exchange.getResponse().isCommitted()) {
|
||||
exchange.getResponse().getHeaders().add(Constant.TRACE_ID_HEADER, traceId);
|
||||
}
|
||||
MDC.remove(Constant.TRACE_ID);
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -13,4 +13,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
|||
*/
|
||||
public interface UserMapper extends BaseMapper<User> {
|
||||
|
||||
boolean hasPermission(Long userId, String url);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,4 +26,6 @@ public interface IUserService extends IService<User> {
|
|||
void update(List<User> users);
|
||||
|
||||
void delete(Long id);
|
||||
|
||||
boolean hasPermission(Long userId, String url);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -74,4 +74,9 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
|
|||
VUtil.trueThrowBusinessError(Objects.isNull(user)).throwMessage("用户不存在");
|
||||
auditLogService.addDelete(User.class, user, UserUtil.getUserName());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasPermission(Long userId, String url) {
|
||||
return baseMapper.hasPermission(userId,url);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,12 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.nflg.wms.repository.mapper.UserMapper">
|
||||
|
||||
</mapper>
|
||||
<select id="hasPermission" resultType="boolean">
|
||||
SELECT EXISTS(SELECT 1
|
||||
FROM user_role_map urm
|
||||
INNER JOIN role_menu_map rmm ON urm.role_id = rmm.role_id
|
||||
INNER JOIN menu m ON rmm.menu_id = m."id"
|
||||
WHERE m.url = #{url}
|
||||
AND urm.user_id = #{userId})
|
||||
</select>
|
||||
</mapper>
|
||||
|
|
@ -8,6 +8,7 @@ import org.springframework.context.annotation.Bean;
|
|||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
|
||||
|
|
@ -20,6 +21,8 @@ public class JacksonConfig {
|
|||
.serializerByType(Long.class, new ToStringSerializer())
|
||||
.serializerByType(Long.TYPE, new ToStringSerializer())
|
||||
.serializerByType(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)))
|
||||
.deserializerByType(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)));
|
||||
.deserializerByType(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)))
|
||||
.serializerByType(LocalDate.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN)))
|
||||
.deserializerByType(LocalDate.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN)));
|
||||
}
|
||||
}
|
||||
|
|
@ -14,11 +14,13 @@ public class RedisConfig {
|
|||
public RedisTemplate<String, Object> redisObjectTemplate(RedisConnectionFactory redisConnectionFactory) {
|
||||
RedisTemplate<String, Object> template = new RedisTemplate<>();
|
||||
template.setConnectionFactory(redisConnectionFactory);
|
||||
StringRedisSerializer serializer = new StringRedisSerializer();
|
||||
// 设置 Key 的序列化器
|
||||
template.setKeySerializer(new StringRedisSerializer());
|
||||
template.setKeySerializer(serializer);
|
||||
// 设置 Value 的序列化器
|
||||
template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
|
||||
template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
|
||||
template.setValueSerializer(serializer);
|
||||
template.setHashValueSerializer(serializer);
|
||||
template.afterPropertiesSet();
|
||||
return template;
|
||||
}
|
||||
|
||||
|
|
@ -26,14 +28,16 @@ public class RedisConfig {
|
|||
public RedisTemplate<String, String> redisStringTemplate(RedisConnectionFactory redisConnectionFactory) {
|
||||
RedisTemplate<String, String> template = new RedisTemplate<>();
|
||||
template.setConnectionFactory(redisConnectionFactory);
|
||||
StringRedisSerializer serializer = new StringRedisSerializer();
|
||||
// 设置 Key 的序列化器
|
||||
template.setKeySerializer(new StringRedisSerializer());
|
||||
template.setKeySerializer(serializer);
|
||||
// 设置 Value 的序列化器
|
||||
template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
|
||||
template.setValueSerializer(serializer);
|
||||
// 设置 Hash Key 的序列化器
|
||||
template.setHashKeySerializer(new StringRedisSerializer());
|
||||
template.setHashKeySerializer(serializer);
|
||||
// 设置 Hash Value 的序列化器
|
||||
template.setHashValueSerializer(new StringRedisSerializer());
|
||||
template.setHashValueSerializer(serializer);
|
||||
template.afterPropertiesSet();
|
||||
return template;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
2
pom.xml
2
pom.xml
|
|
@ -33,7 +33,7 @@
|
|||
<spring-cloud-alibaba.version>2023.0.1.0</spring-cloud-alibaba.version>
|
||||
<hutool-all.version>5.8.37</hutool-all.version>
|
||||
<sa-token.version>1.42.0</sa-token.version>
|
||||
<mybatis-plus.version>3.5.9</mybatis-plus.version>
|
||||
<mybatis-plus.version>3.5.12</mybatis-plus.version>
|
||||
<!-- <mysql-connector.version>8.4.0</mysql-connector.version>-->
|
||||
<postgresql.version>42.7.5</postgresql.version>
|
||||
<oss.version>3.17.4</oss.version>
|
||||
|
|
|
|||
Loading…
Reference in New Issue