add
This commit is contained in:
@ -1,8 +1,10 @@
|
||||
package com.qiaoba.auth.filters;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.qiaoba.api.auth.entity.dto.OnlineUserDto;
|
||||
import com.qiaoba.api.auth.utils.TokenUtil;
|
||||
import com.qiaoba.auth.properties.AuthConfigProperties;
|
||||
import com.qiaoba.common.base.context.BaseContext;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
||||
@ -40,9 +42,10 @@ public class SecurityContextHolderFilter extends OncePerRequestFilter {
|
||||
FilterChain chain) throws ServletException, IOException {
|
||||
log.debug("Start run SecurityContextHolderFilter, Uri: {}", request.getRequestURI());
|
||||
|
||||
String username = TokenUtil.analyzeUsername(request);
|
||||
if (StrUtil.isNotBlank(username)) {
|
||||
UserDetails userDetails = userDetailsService.loadUserByUsername(username);
|
||||
String token = TokenUtil.getToken(request,true);
|
||||
if (StrUtil.isNotBlank(token)) {
|
||||
OnlineUserDto userDto = TokenUtil.getUsernameAndDeviceSn(token);
|
||||
UserDetails userDetails = userDetailsService.loadUserByUsername(userDto.getUsername());
|
||||
// 更新 SecurityContextHolder Authentication, 为了保证 SecurityContext 上下文中 userDetails 是最新的
|
||||
if (Objects.nonNull(userDetails) && Objects.isNull(SecurityContextHolder.getContext().getAuthentication())) {
|
||||
UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());
|
||||
|
@ -1,8 +1,11 @@
|
||||
package com.qiaoba.auth.handler;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.qiaoba.api.auth.entity.LoginUser;
|
||||
import com.qiaoba.api.auth.entity.dto.OnlineUserDto;
|
||||
import com.qiaoba.api.auth.service.OnlineUserService;
|
||||
import com.qiaoba.api.auth.utils.TokenUtil;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.security.core.Authentication;
|
||||
import org.springframework.security.web.authentication.logout.LogoutSuccessHandler;
|
||||
@ -28,10 +31,15 @@ public class LogoutHandler implements LogoutSuccessHandler {
|
||||
|
||||
@Override
|
||||
public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
|
||||
// 删除缓存中的用户信息
|
||||
if (ObjectUtil.isNotEmpty(authentication) && ObjectUtil.isNotEmpty(authentication.getPrincipal())) {
|
||||
LoginUser user = (LoginUser) authentication.getPrincipal();
|
||||
onlineUserService.deleteOne(user.getUsername(), user.getDeviceSn(), true);
|
||||
String token = TokenUtil.getToken(request, true);
|
||||
if (StrUtil.isNotBlank(token)) {
|
||||
try {
|
||||
// 删除缓存中的用户信息
|
||||
OnlineUserDto userDto = TokenUtil.getUsernameAndDeviceSn(token);
|
||||
onlineUserService.deleteOne(userDto.getUsername(), userDto.getDeviceSn(), true);
|
||||
} catch (Exception e) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -38,7 +38,7 @@ public class OnlineUserServiceImpl implements OnlineUserService {
|
||||
|
||||
@Override
|
||||
public void insert(OnlineUser onlineUser) {
|
||||
redisService.set(handleKey(onlineUser.getUsername(), onlineUser.getDeviceSn()), onlineUser, TokenUtil.expireTime * 3600);
|
||||
redisService.set(handleKey(onlineUser.getUsername(), onlineUser.getDeviceSn()), onlineUser, TokenUtil.TOKEN_EXPIRE_HOUR_TIME * 3600);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
Reference in New Issue
Block a user