У меня есть некоторые данные, которые мне нужно скопировать для userA.Так как я не знаю пароль пользователя A, я хочу войти в систему как adminUser и переключиться на пользователя A и опубликовать данные.В связи с этим у меня есть два вопроса: -
Вопрос 1) Сначала я пытаюсь войти и переключиться, используя пример, приведенный в ответе здесь Как выдать себя за пользователя, использующего SwitchUserFilter в Spring?
private final TokenProvider tokenProvider;
protected UserDetailsService userDetailsService;//= (UserDetailsService) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
private final CorsFilter corsFilter;
private final SecurityProblemSupport problemSupport;
public SecurityConfiguration(UserDetailsService userDetailsService,TokenProvider tokenProvider, CorsFilter corsFilter, SecurityProblemSupport problemSupport) {
this.tokenProvider = tokenProvider;
this.corsFilter = corsFilter;
this.userDetailsService = userDetailsService;
this.problemSupport = problemSupport;
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring()
.antMatchers(HttpMethod.OPTIONS, "/**")
.antMatchers("/swagger-ui/index.html")
.antMatchers("/test/**");
}
@Override
public void configure(HttpSecurity http) throws Exception {
// @formatter:off
http
.csrf()
.disable()
.addFilterBefore(corsFilter, UsernamePasswordAuthenticationFilter.class)
.addFilterAfter(switchUserFilter(), FilterSecurityInterceptor.class)
.exceptionHandling()
.authenticationEntryPoint(problemSupport)
.accessDeniedHandler(problemSupport)
.and()
.headers()
.frameOptions()
.disable()
.and()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.antMatchers("/api/authenticate").permitAll()
.antMatchers("/api/register").permitAll()
.antMatchers("/api/activate").permitAll()
.antMatchers("/api/account/reset-password/init").permitAll()
.antMatchers("/api/account/reset-password/finish").permitAll()
.antMatchers("/api/**").authenticated()
.antMatchers("/management/health").permitAll()
.antMatchers("/management/info").permitAll()
.antMatchers("/management/prometheus").permitAll()
.antMatchers("/management/**").hasAuthority(AuthoritiesConstants.ADMIN)
.antMatchers("/login/switchUser").permitAll()
.antMatchers("/login/impersonate").permitAll()
.and()
.apply(securityConfigurerAdapter());
// @formatter:on
}
@Bean
public SwitchUserFilter switchUserFilter() {
SwitchUserFilter filter = new SwitchUserFilter();
filter.setUserDetailsService(userDetailsService);
filter.setSwitchUserUrl("/login/impersonate");
filter.setSwitchFailureUrl("/login/switchUser");
filter.setTargetUrl("/#/home");
return filter;
}
private JWTConfigurer securityConfigurerAdapter() {
return new JWTConfigurer(tokenProvider);
}
}
То, что я пробовал, я вошел в систему как adminUser и в URL я пытаюсь переключиться, изменив URL на http://localhost:9000/login/impersonate?username=userA
Теперь моя проблема в том, что я успешно перенаправленна домашний экран, но мой пользователь остается adminUser.(Я делаю это по той причине, что когда я делаю вызов get / post от почтальона, я получаю ответ о том, что браузер устарел и мне нужно включить javascript)
PS: - У меня есть приложение, разработанное jhipster, поэтому большинство классовуже добавлены по умолчанию.
PPS: - Я знаю, что я чрезвычайно тупой
Вопрос 2) Как я упоминал ранее, мне нужно копировать данные и мне нужно делать это программно,Как я могу достичь этого?Может ли SwitchUserFilter вызвать URL-адрес отдыха и передать ему некоторые пользовательские данные / значения?