Commit 99a0fe79 by zhangxingmin

认证中心权限校验过滤器优化

parent 6158ca1b
package com.yd.auth.core.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* 登录配置类
*/
@Data
@Component
@ConfigurationProperties(prefix = "login")
public class LoginConfig {
//登录信息存入缓存的时间2天
private Integer redisTimeout;
}
package com.yd.auth.core.security;
import com.yd.auth.core.dto.AuthUserDto;
import com.yd.common.constant.RedisConstants;
import com.yd.common.result.Result;
import com.yd.common.utils.RedisUtil;
import com.yd.user.feign.client.sysuser.ApiSysUserFeignClient;
import com.yd.user.feign.request.sysuser.ApiSysUserDetailBodyRequest;
import com.yd.user.feign.response.sysuser.ApiSysUserDetailResponse;
......@@ -32,6 +34,9 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter {
// private ISysUserService iSysUserService;
@Autowired
private RedisUtil redisUtil;
@Autowired
private ApiSysUserFeignClient apiSysUserFeignClient;
private final JwtTokenProvider tokenProvider;
......@@ -53,8 +58,12 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter {
// 3. 从JWT令牌中提取用户唯一标识(业务ID)
String userBizId = tokenProvider.getUserBizIdFromToken(token);
// 4. 根据用户唯一标识查询用户详细信息(包括权限信息)
UserDetails userDetails = queryUserDetails(userBizId);
// 4. 根据用户唯一标识查询用户详细信息(包括权限信息)从缓存里面获取
UserDetails userDetails = redisUtil.getCacheObject(RedisConstants.LOGIN_USER + userBizId);
if (Objects.isNull(userDetails)) {
throw new UsernameNotFoundException("用户不存在");
}
// UserDetails userDetails = queryUserDetails(userBizId);
// 5. 创建Spring Security认证对象
// - userDetails: 包含用户身份和权限信息
......
package com.yd.auth.core.service.impl;
import com.yd.auth.core.config.LoginConfig;
import com.yd.auth.core.dto.AuthUserDto;
import com.yd.auth.core.request.LoginRequest;
import com.yd.auth.core.response.LoginResponse;
import com.yd.auth.core.security.JwtTokenProvider;
import com.yd.auth.core.service.AuthService;
import com.yd.common.constant.RedisConstants;
import com.yd.common.utils.RedisUtil;
import com.yd.common.utils.SM3Util;
import com.yd.user.service.model.SysUser;
import com.yd.user.service.service.ISysUserService;
......@@ -17,6 +21,7 @@ import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
@Service
public class AuthServiceImpl implements AuthService {
......@@ -25,6 +30,12 @@ public class AuthServiceImpl implements AuthService {
@Qualifier("sysUserServiceImpl")
private ISysUserService iSysUserService;
@Autowired
private RedisUtil redisUtil;
@Autowired
private LoginConfig loginConfig;
private final AuthenticationManager authenticationManager;
private final JwtTokenProvider jwtTokenProvider;
......@@ -85,6 +96,9 @@ public class AuthServiceImpl implements AuthService {
response.setToken(token); // 设置生成的JWT令牌
response.setExpiresIn(jwtTokenProvider.getJwtExpiration()); // 设置令牌过期时间
//获取用户登录信息存入redis缓存中,2天
AuthUserDto currentUser = (AuthUserDto) authenticated.getPrincipal();
redisUtil.setCacheObject(RedisConstants.LOGIN_USER + sysUser.getUserBizId(),currentUser,loginConfig.getRedisTimeout(), TimeUnit.DAYS);
return response;
}
......
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