Eingellogten Benutzer über JWT-Token holen!

freebeer

Mitglied
Guten Abend liebe Java Community.

Derzeit versuche ich einen JWT-Token OAuth Flow (falls das die korrekte Bezeichnung ist) in meine Anwendung einzubauen. Nun stellt sich mir die Frage wie hole ich mir den derzeit eingellogten Benutzer über den JWT-Token? Ohne Token würde das ganze ja über den SecurityContextHolder geschehen. In etwa so:

Java:
@Override
    public Object getCurrentUserProfile() {
        org.springframework.security.core.Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        if(!(authentication instanceof AnonymousAuthenticationToken)) {
            String username = authentication.getName();
            Users users = usersRepository.findByEmail(username).orElseThrow(()-> new UsernameNotFoundException("no user found"));
            int userid = users.getUserId();
           }
            return null;
    }

was ändert sich nun grundsätzlich mit JWT Token? Und wie komme ich an den Benutzer ran?
 

Ullenboom

Bekanntes Mitglied
Um den aktuellen Benutzer über einen JWT-Token zu erhalten, ändert sich der grundlegende Mechanismus nicht. ABER. Damit das ganze klappt, muss eine Spring-Security-Konfiguration den JWT-Filter einrichten, der die Tokens validiert und ein Authentication-Objekt für den Controller erstellt.
 

freebeer

Mitglied
Ungefähr so?
Java:
   private final JwtAuthorizationFilter jwtAuthFilter;
    @Bean
    protected SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
          //Code
          .addFilterBefore(jwtAuthFilter, UsernamePasswordAuthenticationFilter.class)
          .build();                                           
    }

Und dann in der Klasse JwtAuthorizationFilter:
Java:
   @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
        if (request.getMethod().equalsIgnoreCase(OPTIONS_HTTP_METHOD)) {
            response.setStatus(OK.value());
            } else {
            String authorizationHeader = request.getHeader(AUTHORIZATION);
            if (authorizationHeader == null || !authorizationHeader.startsWith(TOKEN_PREFIX)) {
                filterChain.doFilter(request, response);
                return;
            }
            String token = authorizationHeader.substring(TOKEN_PREFIX.length());
            String username = jwtTokenProvider.getSubject(token);
            if (jwtTokenProvider.isTokenValid(username, token) && SecurityContextHolder.getContext().getAuthentication() == null) {
                List<GrantedAuthority> authorities = jwtTokenProvider.getAuthorities(token);
                Authentication authentication = jwtTokenProvider.getAuthentication(username, authorities, request);
                SecurityContextHolder.getContext().setAuthentication(authentication);
            } else {
                SecurityContextHolder.clearContext();
            }
        }
                filterChain.doFilter(request, response);
    }
}
 

Ähnliche Java Themen

Neue Themen


Oben