Метод Spring Security getprincipal () возвращает строку (имя пользователя) вместо класса UserDetails - PullRequest
0 голосов
/ 04 апреля 2019

Мы используем Spring-boot 2.0.5 с JWT Token

SecurityContextHolder.getContext().getAuthentication().getPrincipal() возвращает String (Username) вместо CustomUserDetails Объект, который реализован UserDetails класс только в файле WAR.

Эта проблема дублируется только в большинстве случаев, когда код работает идеально

Нижеследующее упоминание - это единственный пользовательский фильтр, который мы используем, и он вызывается после FilterSecurityInterceptor Filter

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
        throws IOException, ServletException {
    CustomHttpServletRequestWrapper request = new CustomHttpServletRequestWrapper((HttpServletRequest) req);
    if(request!=null && request.getHeader("Authorization")!=null && request.getHeader("Authorization").length()>7) {

        CustomUserDetails user = (CustomUserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
}
}

Должен возвращаться объект детализации пользователя

1 Ответ

0 голосов
/ 04 апреля 2019

Недостаточно информации, чтобы предоставить вам какие-либо ответы, будет полезно знать:

  • какой экземпляр возвращается из SecurityContextHolder.getContext().getAuthentication()?
  • каков список ваших фильтров безопасности, которые у вас естьи где находится ваш пользовательский?
  • когда это происходит?Вы должны знать шаги, чтобы воспроизвести его
...