Я разрабатываю приложение с загрузочной пружиной, имеющее интерфейс с angular6 и использующее Eureka для реестра служб и zuul для шлюза аутентификации, оба в качестве отдельной службы.Я использую jwt для аутентификации.
Когда я нажимаю на url localhost: 8080 / dis / academics / complaint / getMyComplaints с заголовком авторизации, имеющим значение токена jwt, затем он переходит в службу шлюза, а затем шлюз пересылает это ученымсервис после действительной аутентификации на шлюзе.
Теперь я хочу получить имя пользователя из токена в сервисе академиков.Как я могу его получить?
Контроллер в службе шлюза
@RestController
@RequestMapping("/dis")
public class AuthRestAPIs {
@PostMapping("/signin")
public ResponseEntity<?> authenticateUser(@Valid @RequestBody LoginForm loginRequest) {
Authentication authentication = authenticationManager.authenticate(
new UsernamePasswordAuthenticationToken(loginRequest.getUsername(), loginRequest.getPassword()));
SecurityContextHolder.getContext().setAuthentication(authentication);
String jwt = jwtProvider.generateJwtToken(authentication);
//UserDetails userDetails = (UserDetails) authentication.getPrincipal();
UserPrinciple userPrincipal = (UserPrinciple) authentication.getPrincipal();
return ResponseEntity.ok(new JwtResponse(jwt, userPrincipal.getUsername(), userPrincipal.getUserType(), userPrincipal.getAuthorities()));
}
}
Контроллер в службе академии
@RestController
@RequestMapping("/complaint")
public class ComplaintsController {
@RequestMapping(value = "/getMyComplaints", method = RequestMethod.GET)
public <T, U> Object[] getMyComplaints(Authentication authentication)
{
String username = authentication.getName();
//System.out.println(username);
String user_type = "student";
List<Object> complaints = new ArrayList<>();
if(user_type.equals("student"))
{
Collections.addAll(complaints, cleanlinessComplaintRepository.findByCreatedBy(username));
Collections.addAll(complaints, leComplaintRepository.findByCreatedBy(username));
Collections.addAll(complaints, facultyComplaintRepository.findByCreatedBy(username));
Collections.addAll(complaints, otherComplaintRepository.findByCreatedBy(username));
}
return complaints.toArray();
}
}
Я пытался использовать класс аутентификации, но получил нулевое значение.Как мне этого добиться?