| | |
| | | |
| | | import com.ard.common.constant.CacheConstants; |
| | | import com.ard.common.constant.Constants; |
| | | import com.ard.common.core.domain.model.LoginUser; |
| | | import com.ard.common.core.redis.RedisCache; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.context.ApplicationEventPublisher; |
| | | import org.springframework.security.authentication.event.AuthenticationSuccessEvent; |
| | | import org.springframework.security.core.Authentication; |
| | | import org.springframework.security.core.context.SecurityContextHolder; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | @Component |
| | |
| | | @Autowired |
| | | private RedisCache redisCache; |
| | | |
| | | public void onAuthenticationSuccess(Long userId) { |
| | | @Autowired |
| | | private ApplicationEventPublisher publisher; |
| | | |
| | | public void onAuthenticationSuccess(Authentication authentication) { |
| | | // 允许多端登录,直接放行 |
| | | if (soloLogin) { |
| | | return; |
| | | } |
| | | // 检查 Redis 中是否已有该用户登录 |
| | | LoginUser loginUser = (LoginUser) authentication.getPrincipal(); |
| | | Long userId = loginUser.getUser().getUserId(); |
| | | |
| | | String key = CacheConstants.LOGIN_USERID_KEY + userId; |
| | | if (redisCache.hasKey(key)) { |
| | | throw new RuntimeException("用户已登录,请勿重复登录"); |
| | | } |
| | | // 登录成功事件推送 |
| | | if (authentication != null && authentication.isAuthenticated()) { |
| | | publisher.publishEvent(new AuthenticationSuccessEvent(authentication)); |
| | | } |
| | | } |
| | | |
| | | } |