2016-03-29 5 views
0

У меня есть поле пароля в базе данных, содержащей MD5 (имя пользователя + пароль). Как реализовать это в Spring Security + JdbcAuthentication. Я знаю, что это не безопасно никакими средствами, но это устаревшая база данных, с которой я должен поговорить. Мой текущий код выглядит так:Spring Boot Security 4 custom PasswordEncoder

auth.jdbcAuthentication() 
    .dataSource(dataSource) 
    .usersByUsernameQuery("select login, password, 1 as enabled from 
          login where login=?") 
    .authoritiesByUsernameQuery("select login,role" + 
        " from login lo" + 
        " join login_role lor on lo.login_id = lor.login_id" + 
        " join role gr on lor.role_id = gr.role_id" + 
        " where login=?") 

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

+0

Чтобы использовать как можно больше инфраструктуры по умолчанию для безопасности Spring, вам понадобится 'SaltSource' для получения' username' для добавления пароля. Затем вам понадобится настраиваемое расширение для MessageDigestPasswordEncoded для добавления соли перед паролем (по умолчанию используется 'password {salt}' вместо вашей схемы. –

+0

Я пошел с хакерским способом и переписал параметры запроса в ServletFilter. Следовательно, имя пользователя + пароль передается как Пароль в кодер md5. Были некоторые проблемы с верхним или нижним регистром, но SQL решил это. Спасибо всем. –

ответ

-1

Вы должны сделать, как следующее

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

    auth.jdbcAuthentication().dataSource(dataSource) 
     .passwordEncoder(passwordEncoder()) 
     .usersByUsernameQuery("sql...") 
     .authoritiesByUsernameQuery("sql..."); 
} 

@Bean 
public PasswordEncoder passwordEncoder(){ 
    PasswordEncoder encoder = new BCryptPasswordEncoder(); 
    return encoder; 
} 

Надежда свою помощь вам.

0

Вы можете настроить всю аутентификацию в вашем applicationContext.xlm так:

<sec:authentication-manager> 
     <sec:authentication-provider> 
      <sec:password-encoder ref="encoder" /> // And here is an encoder that will encode a password which comes from login form. 
      <sec:jdbc-user-service data-source-ref="dataSource" 
       users-by-username-query="your query" 
       authorities-by-username-query="your query for authentication table" /> 
     </sec:authentication-provider> 
    </sec:authentication-manager> 

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

PS. Извините, не уверен, насколько корректен мой ответ. Был только читателем здесь около года, а теперь решил присоединиться и написать несколько вопросов.

0

Я пошел с хакерским способом и переписал параметры запроса в ServletFilter. Ключом для этого было использование пользовательского HttpServletRequestWrapper, чтобы иметь возможность изменять запрос.

Теперь имя пользователя + пароль передается в качестве пароля для кодера md5. Были некоторые проблемы с верхним/нижним регистром, но настройка SQL решила это.

Смежные вопросы