как на самом деле работает @bean и @Autowired? - PullRequest
0 голосов
/ 12 декабря 2018

Моя конфигурация:

   @Autowired
    private PasswordEncoder passwordEncoder;

    @Bean
    public PasswordEncoder passwordEncoderBean() {
        return new BCryptPasswordEncoder();
    }

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

    // @Autowired
    @Override
    public void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth
                .userDetailsService(jwtUserDetailsService)
                .passwordEncoder(passwordEncoder);
    }

этот код работает нормально.Но если я удаляю @Autowired из passwordEncoder, тогда я должен добавить @Autowired в методе configure.Но это правило не распространяется на метод authenticationManagerBean().Кто-нибудь может объяснить?

Ответы [ 3 ]

0 голосов
/ 12 декабря 2018

Кажется, вы используете конфигурацию аннотаций Spring,

Если вы не добавляете аннотации Spring в метод или поле, Spring не знает, что это нужно инициировать и, следовательно, при использовании в контексте Spring (также безинициализировать его вне Spring), объекты будут нулевыми

0 голосов
/ 12 декабря 2018

В целях безопасности необходимо избегать хранения пароля в виде открытого текста.исходя из этого принципа, у вас есть возможность закодировать ваш пароль.

В вашем примере вы используете интерфейс PasswordEncoder :

.passwordEncoder(passwordEncoder);

Используя этот подход, вы должны сообщить одну реализацию.В Spring вы можете внедрить эту реализацию, используя @Autowired (в объявлении или в коде вашего метода, который использует ваш PasswordEncoder интерфейс).

Просто вопрос ... Почему вы создали одну реализацию?

public PasswordEncoder passwordEncoderBean(){...

Я думаю, что этот метод можно заменить для вашего интерфейса кодирования с автопроводкой.

0 голосов
/ 12 декабря 2018

Посмотрите на этот URL https://spring.io/guides/topicals/spring-security-architecture/ Похоже, что вы используете Autowire AuthenticationManagerBuilder как @Bean здесь.

Сконфигурируйте (AuthenticationManagerBuilder auth), так что в этом случае он будет работать, а passwordEncoder также будет автоматически подключен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...