Циркулярная ссылка в пользовательском фильтре входа - PullRequest
0 голосов
/ 16 апреля 2020

Я пытался добавить пользовательский фильтр с дополнительным параметром входа в Spring Security, после чего должны быть указаны https://www.baeldung.com/spring-security-extra-login-fields и Менеджер аутентификации Spring Security - для пользовательского фильтра , используя addFilterBefore в мой метод configure () Проблема в том, что я получаю следующее сообщение об ошибке:

org.springframework.beans.factory.BeanCurrentlyInCreationException: Ошибка при создании компонента с именем 'customLoginFilter': в данный момент создается запрашиваемый компонент: существует неразрешимая круговая ссылка?

Вот WebSecurityConfig:

@Resource(name = "userDetailsService")
private UserDetailsService userDetailsService;

@Autowired
@Qualifier("authenticationProvider")
AuthenticationProvider authenticationProvider;


@Override
@Bean
public AuthenticationManager authenticationManagerBean() throws Exception {
    return super.authenticationManagerBean();
}

@Bean
public CustomLoginFilter customLoginFilter() throws Exception {
    CustomLoginFilter customLoginFilter = new CustomLoginFilter();
    customLoginFilter.setAuthenticationManager(authenticationManagerBean());
    return customLoginFilter;
}


@Autowired
CustomLoginFilter customLoginFilter;

@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {

    auth.authenticationProvider(authenticationProvider);
    PasswordEncoder encoder = PasswordEncoderFactories.createDelegatingPasswordEncoder();
    auth.inMemoryAuthentication()
            .withUser("spring")
            .password("{bcrypt}"+encoder.encode("secret"))
            .roles("USER");
}

@Override
protected void configure(final HttpSecurity http) throws Exception {
    http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
            .addFilterBefore(customLoginFilter, UsernamePasswordAuthenticationFilter.class)
            .authorizeRequests()
            .antMatchers("/v2/api-docs", "/swagger-resources/configuration/ui", "/swagger-resources", "/swagger-resources/configuration/security", "/swagger-ui.html", "/webjars/**").permitAll()
            .antMatchers("/login").permitAll()
            //...
            .anyRequest().authenticated()
            .and().csrf().disable();
}

Пользовательский фильтр:

public class CustomLoginFilter extends UsernamePasswordAuthenticationFilter {
@Override
public Authentication attemptAuthentication(
        HttpServletRequest request,
        HttpServletResponse response)
        throws AuthenticationException {

    UsernamePasswordAuthenticationToken authRequest = getAuthRequest(request);
    setDetails(request, authRequest);

    return this.getAuthenticationManager()
            .authenticate(authRequest);
}

private UsernamePasswordAuthenticationToken getAuthRequest(
        HttpServletRequest request) {

    String username = obtainUsername(request);
    String password = obtainPassword(request);
    String nmDossier = obtainDossier(request);

    String usernameDomain = String.format("%s%s%s", username.trim(),
            String.valueOf(Character.LINE_SEPARATOR), nmDossier);
    return new UsernamePasswordAuthenticationToken(
            usernameDomain, password);
}

private String obtainDossier(HttpServletRequest request){
    return request.getParameter("dossier_number");
}

@Override
@Autowired
public void setAuthenticationManager(AuthenticationManager authenticationManager) {
    super.setAuthenticationManager(authenticationManager);
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...