извлечь имя пользователя из inMemoryAuthentication () -WebSecurityConfigurerAdapter - PullRequest
0 голосов
/ 09 апреля 2020

Я работаю над школьным проектом с SpringBoot и после добавления некоторых функций безопасности (WebSecurityConfigurerAdapter), видимых на inte rnet, я хотел бы знать, есть ли возможность извлечь имя пользователя текущего вошедшего в систему пользователя, потому что я нужен его идентификатор на других методах из контроллера, чтобы извлечь некоторую информацию из базы данных.

Мой класс SecurityConfig выглядит следующим образом

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/*").access("hasRole('USER')")
                .antMatchers("/admin/*").hasRole("ADMIN")
                .and()
                // some more method calls
                .formLogin();
    }


    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth)      throws Exception {

        auth.inMemoryAuthentication().withUser("flaviu")
                .password("yes").roles("USER");
    }

    @SuppressWarnings("deprecation")
    @Bean
    public static NoOpPasswordEncoder passwordEncoder() {
        return (NoOpPasswordEncoder) NoOpPasswordEncoder.getInstance();
    }

}

1 Ответ

2 голосов
/ 09 апреля 2020

Самый простой способ получить аутентифицированного в данный момент участника - это через stati c вызов к SecurityContextHolder:

Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
String currentUserName = authentication.getName();

Получить пользователя в контроллере:

@Controller
public class SecurityController {

    @RequestMapping(value = "/username", method = RequestMethod.GET)
    @ResponseBody
    public String currentUserName(Principal principal) {
        return principal.getName();
    }
}

we также можно использовать токен аутентификации:

@Controller
public class SecurityController {

    @RequestMapping(value = "/username", method = RequestMethod.GET)
    @ResponseBody
    public String currentUserName(Authentication authentication) {
        return authentication.getName();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...