|
|
@@ -1,7 +1,11 @@
|
|
|
package com.njuzr.eaibackend.config;
|
|
|
|
|
|
+import com.njuzr.eaibackend.dto.user.UserRegisterDTO;
|
|
|
+import com.njuzr.eaibackend.dto.user.UserUpdateDTO;
|
|
|
+import com.njuzr.eaibackend.enums.Role;
|
|
|
import com.njuzr.eaibackend.exception.MyAuthenticationEntryPoint;
|
|
|
import com.njuzr.eaibackend.service.MyUserDetailService;
|
|
|
+import com.njuzr.eaibackend.service.UserService;
|
|
|
import com.njuzr.eaibackend.utils.JWTTokenUtil;
|
|
|
import jakarta.servlet.FilterChain;
|
|
|
import jakarta.servlet.ServletException;
|
|
|
@@ -16,6 +20,7 @@ import org.springframework.stereotype.Component;
|
|
|
import org.springframework.web.filter.OncePerRequestFilter;
|
|
|
|
|
|
import java.io.IOException;
|
|
|
+import java.util.Map;
|
|
|
|
|
|
/**
|
|
|
* @author: Leonezhurui
|
|
|
@@ -29,12 +34,14 @@ public class JWTAuthenticationFilter extends OncePerRequestFilter {
|
|
|
|
|
|
private final JWTTokenUtil jwtTokenUtil;
|
|
|
private final MyUserDetailService userDetailService;
|
|
|
+ private final UserService userService;
|
|
|
|
|
|
private final MyAuthenticationEntryPoint authenticationEntryPoint = new MyAuthenticationEntryPoint();
|
|
|
|
|
|
- public JWTAuthenticationFilter(JWTTokenUtil jwtTokenUtil, MyUserDetailService userDetailService) {
|
|
|
+ public JWTAuthenticationFilter(JWTTokenUtil jwtTokenUtil, MyUserDetailService userDetailService, UserService userService) {
|
|
|
this.jwtTokenUtil = jwtTokenUtil;
|
|
|
this.userDetailService = userDetailService;
|
|
|
+ this.userService = userService;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -47,6 +54,38 @@ public class JWTAuthenticationFilter extends OncePerRequestFilter {
|
|
|
if (token != null) {
|
|
|
String username = jwtTokenUtil.parseToken(token);
|
|
|
log.info("解析出username:" + username);
|
|
|
+ Map<String, Object> userInfoMap = jwtTokenUtil.parseClaim(token).getBody().get("user_info", Map.class);
|
|
|
+
|
|
|
+ // 不为空则认为是门户请求
|
|
|
+ if(userInfoMap != null){
|
|
|
+ log.info("解析出的用户信息:{}", userInfoMap.toString());
|
|
|
+ //pid:门户用户id
|
|
|
+ Integer pid = Integer.valueOf(userInfoMap.get("id").toString());
|
|
|
+ String name = userInfoMap.get("name").toString();
|
|
|
+ String email = userInfoMap.get("email").toString();
|
|
|
+ String phone = userInfoMap.get("phone").toString();
|
|
|
+ Role role = Role.valueOf(userInfoMap.get("role").toString());
|
|
|
+ // 如果EAI数据库中没有该用户,则添加该用户
|
|
|
+ if (!userService.userExists(pid)) {
|
|
|
+ log.info("用户不存在,添加用户{}", phone);
|
|
|
+ UserRegisterDTO reg = new UserRegisterDTO();
|
|
|
+ reg.setPid(pid);
|
|
|
+ reg.setOfficialEmail(email);
|
|
|
+ reg.setOfficialNumber(username);
|
|
|
+ reg.setPhone(phone);
|
|
|
+ reg.setRole(role);
|
|
|
+ reg.setName(name);
|
|
|
+ reg.setPassword("no_password");
|
|
|
+ userService.createUser(reg);
|
|
|
+ } else {
|
|
|
+ // 否则更新用户信息
|
|
|
+ UserUpdateDTO update = new UserUpdateDTO();
|
|
|
+ update.setContentEmail(email);
|
|
|
+ update.setPhone(phone);
|
|
|
+ userService.updateUserByPid(pid, update);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
UserDetails userDetails = userDetailService.loadUserByUsername(username);
|
|
|
log.info("解析出UserDetails:" + userDetails);
|
|
|
|