refactor: 登录认证代码优化

This commit is contained in:
haoxr
2023-03-27 23:05:47 +08:00
parent 54f1c4efac
commit 3a10d65c9b
5 changed files with 35 additions and 36 deletions

View File

@@ -15,6 +15,7 @@ import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import jakarta.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
@@ -29,6 +30,7 @@ import java.util.concurrent.TimeUnit;
@RestController
@RequestMapping("/api/v1/auth")
@RequiredArgsConstructor
@Slf4j
public class AuthController {
private final AuthenticationManager authenticationManager;
private final JwtTokenManager jwtTokenManager;
@@ -46,7 +48,6 @@ public class AuthController {
password
);
Authentication authentication = authenticationManager.authenticate(authenticationToken);
SecurityContextHolder.getContext().setAuthentication(authentication);
// 生成token
String accessToken = jwtTokenManager.createToken(authentication);
LoginResult loginResult = LoginResult.builder()
@@ -56,9 +57,9 @@ public class AuthController {
return Result.success(loginResult);
}
@Operation(summary = "注销", security = {@SecurityRequirement(name = "Authorization")})
@Operation(summary = "注销", security = {@SecurityRequirement(name = SecurityConstants.TOKEN_KEY)})
@DeleteMapping("/logout")
public Result login(HttpServletRequest request) {
public Result logout(HttpServletRequest request) {
String token = RequestUtils.resolveToken(request);
if (StrUtil.isNotBlank(token)) {
Claims claims = jwtTokenManager.getTokenClaims(token);
@@ -67,7 +68,7 @@ public class AuthController {
Date expiration = claims.getExpiration();
if (expiration != null) {
// 有过期时间在token有效时间内存入黑名单超出时间移除黑名单节省内存占用
long ttl = (expiration.getTime() - System.currentTimeMillis()) ;
long ttl = (expiration.getTime() - System.currentTimeMillis());
redisTemplate.opsForValue().set(SecurityConstants.BLACK_TOKEN_CACHE_PREFIX + jti, null, ttl, TimeUnit.MILLISECONDS);
} else {
// 无过期时间,永久加入黑名单