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