У меня есть модель сущности с именем User
. Я реализовал UserDetailsService
и использовал его в WebSecurityConfig следующим образом. Для краткости удален ненужный код.
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
public void configure(AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception {
authenticationManagerBuilder.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
}
@Bean
@Override
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}
}
Теперь в любом месте во время запроса-ответа я могу использовать этот код, чтобы получить зарегистрированного пользователя
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
String username = auth.getName();
// now use some jpa logic to retrive User entity using above username
Теперь мой вопрос Есть ли способ создать пользовательский AOP или аннотацию, которая дает мне доступ вошедшему в систему пользователю, чтобы я мог использовать его в любом месте, как в моем контроллере, как показано ниже?
public class LoginController {
public String response(@CurrentUser User user) {
// do logic once you have access to logged in user with help of @CurrentUser annotation
}
}
Так, как в приведенном выше примере , могу ли я создать аннотацию @CurrentUser
, которая дает мне в настоящее время зарегистрированного пользователя (если не выдает исключение, которое я могу поймать в совете контроллера)?
Примечание: Как получить пользователя, зависит от меня. В приведенном выше примере я использую authenticntcation.getName (), а затем запрашиваю мою базу данных для создания сущности пользователя. Но я могу использовать любой другой способ сделать это. Я просто хочу создать аннотацию наподобие CurrentUser, а затем добавить код (для извлечения пользователя) за ней.