Расширение монолитного приложения Jhipster JWT (Spring) для поддержки олицетворения - PullRequest
0 голосов
/ 09 ноября 2019

Я создал приложение jhipster angular / java, использующее аутентификацию JWT.

Теперь я хочу расширить приложение для поддержки олицетворения.

Мне интереснов достигается следующее:

  • Олицетворение администратором : разрешение администратора для входа в систему под учетной записью любого другого пользователя

  • Олицетворение, предоставленное пользователю: Разрешение другому пользователю, которому предоставлено право выдавать себя за пользователя (предоставленного самим пользователем), для входа в систему в качестве этого другого пользователя.

  • Аудит - регистрация изменений (функция аудита) - контрольный журнал должен уметь различать фактического пользователя и пользователя, имитирующего себя, и записывать его в контрольном журнале.

Я вижу, что Spring поддерживает олицетворение, но мне неясно, как я могу правильно реализовать его в своем приложении Jhipster, учитывая, что используется JWT. Я не уверен, подходит ли маршрут Spring для приложения JHipster-JWT-Monolith - я считаю, что это неправильный подход.

Хотя по различным другим постам после обширной публикации имеется некоторая неполная информацияпоиск Мне не удалось найти сообщение, которое может дать четкое пошаговое руководство по этому вопросу. Если кто-то может сделать это для меня, это будет очень цениться. Я ожидаю, что другие также сочтут такой ответ очень полезным.

Заранее спасибо. Fergal

1 Ответ

1 голос
/ 12 ноября 2019

Вам просто нужно добавить метод ниже в UserJwtController.java

@PostMapping("/authenticate-externalnodes")
    public ResponseEntity<JWTToken> authenticateExternalnodes(@Valid @RequestBody LoginVM loginVM) {
        // Get Roles for user via username
        Set<Authority> authorities = userService.getUserWithAuthoritiesByLogin(loginVM.getUsername()).get()
                .getAuthorities();
        // Create Granted Authority Rules
        Set<GrantedAuthority> grantedAuthorities = new HashSet<>();
        for (Authority authority : authorities) {
            grantedAuthorities.add(new SimpleGrantedAuthority(authority.getName()));
        }
        UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(
                loginVM.getUsername(), "", grantedAuthorities);
        Authentication authentication = authenticationToken;
        SecurityContextHolder.getContext().setAuthentication(authentication);
        boolean rememberMe = (loginVM.isRememberMe() == null) ? false : loginVM.isRememberMe();
        String jwt = tokenProvider.createToken(authentication, rememberMe);
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.add(JWTFilter.AUTHORIZATION_HEADER, "Bearer " + jwt);
        return new ResponseEntity<>(new JWTToken(jwt), httpHeaders, HttpStatus.OK);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...