鉴权平板返回不同的code,增加用户获取联系人列表,未完成
This commit is contained in:
@@ -83,7 +83,12 @@ public class LoginController {
|
|||||||
User userDetails = (User) authentication.getPrincipal();
|
User userDetails = (User) authentication.getPrincipal();
|
||||||
TokenPair tokenPair = jwtUtil.generateTokenPair(userDetails.getUserId(), deviceId);
|
TokenPair tokenPair = jwtUtil.generateTokenPair(userDetails.getUserId(), deviceId);
|
||||||
// 4. 返回 Token
|
// 4. 返回 Token
|
||||||
return Result.ok().data(Collections.singletonMap("token", tokenPair.toMap()));
|
Map<String, Object> tokenMap = new HashMap<>();
|
||||||
|
tokenMap.put("new_user", user.isNewUser());
|
||||||
|
tokenMap.put("user_id", user.getUserId());
|
||||||
|
tokenMap.put("has_password", user.isHasPassword());
|
||||||
|
tokenMap.put("token", tokenPair.toMap());
|
||||||
|
return Result.ok().data(tokenMap);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
return Result.error().message("登录失败:密码错误");
|
return Result.error().message("登录失败:密码错误");
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import com.onekeycall.videotablet.service.ContactService;
|
|||||||
import com.onekeycall.videotablet.service.DeviceSnService;
|
import com.onekeycall.videotablet.service.DeviceSnService;
|
||||||
import com.onekeycall.videotablet.service.UserService;
|
import com.onekeycall.videotablet.service.UserService;
|
||||||
import com.onekeycall.videotablet.utils.JwtUtil;
|
import com.onekeycall.videotablet.utils.JwtUtil;
|
||||||
|
import com.onekeycall.videotablet.utils.TextUtils;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
@@ -17,6 +18,8 @@ import org.springframework.data.redis.core.RedisTemplate;
|
|||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/user")
|
@RequestMapping("/user")
|
||||||
public class ContactController {
|
public class ContactController {
|
||||||
@@ -77,4 +80,38 @@ public class ContactController {
|
|||||||
|
|
||||||
return Result.ok();
|
return Result.ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/get_contacts")
|
||||||
|
public Result getContacts(
|
||||||
|
@RequestHeader("Authorization") String authHeader, @RequestHeader("Device-ID") String deviceId,
|
||||||
|
@RequestParam(value = "user_id") String userId, @RequestParam(value = "sn") String sn
|
||||||
|
) {
|
||||||
|
if (!authHeader.startsWith("Bearer ")) {
|
||||||
|
return Result.error().message("Invalid Authorization header");
|
||||||
|
}
|
||||||
|
String token = authHeader.substring(7); // 去掉 "Bearer " 前缀
|
||||||
|
|
||||||
|
if (!jwtUtil.validateAccessToken(userId, token, deviceId)) {
|
||||||
|
return Result.error().message("Invalid token");
|
||||||
|
}
|
||||||
|
|
||||||
|
User user = userService.getUserByUserId(userId);
|
||||||
|
if (user == null) {
|
||||||
|
return Result.error().message("user not found");
|
||||||
|
}
|
||||||
|
DeviceInfo deviceInfo = deviceSnService.findBySn(sn);
|
||||||
|
if (deviceInfo == null) {
|
||||||
|
return Result.error().message("device not found");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!deviceInfo.getUserId().equals(userId)) {
|
||||||
|
return Result.error().message("device not belong to user");
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Contact> contacts = contactService.findAllBySn(sn);
|
||||||
|
if (contacts == null || contacts.isEmpty()) {
|
||||||
|
return Result.notFound().message("contacts not found");
|
||||||
|
}
|
||||||
|
return Result.ok().data("contacts", contacts);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter {
|
|||||||
logger.debug("Extracted username: " + username);
|
logger.debug("Extracted username: " + username);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.error("Token解析失败 | Token: " + jwt, e);
|
logger.error("Token解析失败 | Token: " + jwt, e);
|
||||||
setResponse(response, Result.unAuthorized().message("Invalid credentials"));
|
setUnauthorizedResponse(response, Result.unAuthorized().message("Invalid credentials"));
|
||||||
return; // 重要!验证失败时终止过滤器链
|
return; // 重要!验证失败时终止过滤器链
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -100,7 +100,7 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter {
|
|||||||
logger.debug("Successfully authenticated user: " + username);
|
logger.debug("Successfully authenticated user: " + username);
|
||||||
} else {
|
} else {
|
||||||
logger.warn("Token验证失败 | User: " + username);
|
logger.warn("Token验证失败 | User: " + username);
|
||||||
setResponse(response, Result.unAuthorized().message("Token validation failed"));
|
setUnauthorizedResponse(response, Result.unAuthorized().message("Token validation failed"));
|
||||||
return; // 重要!验证失败时终止过滤器链
|
return; // 重要!验证失败时终止过滤器链
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -162,7 +162,7 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter {
|
|||||||
// 调用SN验证服务(假设有SNService)
|
// 调用SN验证服务(假设有SNService)
|
||||||
if (!jwtUtil.validateDeviceToken(deviceToken, deviceId, sn)) {
|
if (!jwtUtil.validateDeviceToken(deviceToken, deviceId, sn)) {
|
||||||
logger.warn("SN验证失败 | DeviceID: {} | SN: {}", deviceId, sn);
|
logger.warn("SN验证失败 | DeviceID: {} | SN: {}", deviceId, sn);
|
||||||
setResponse(response, Result.unAuthorized().message("设备验证失败"));
|
setUnauthorizedResponse(response, Result.unAuthorized().message("设备验证失败"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
logger.debug("SN验证成功 | DeviceID: {} | SN: {}", deviceId, sn);
|
logger.debug("SN验证成功 | DeviceID: {} | SN: {}", deviceId, sn);
|
||||||
@@ -194,5 +194,16 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter {
|
|||||||
response.getWriter().flush();
|
response.getWriter().flush();
|
||||||
response.getWriter().close();
|
response.getWriter().close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void setUnauthorizedResponse(HttpServletResponse response, Result result) throws IOException {
|
||||||
|
SecurityContextHolder.clearContext();
|
||||||
|
|
||||||
|
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); // 设置为200状态码
|
||||||
|
response.setContentType("application/json;charset=utf-8");
|
||||||
|
response.getWriter().write(GsonUtils.toJSONString(result));
|
||||||
|
response.getWriter().flush();
|
||||||
|
response.getWriter().close();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user