Задать вопрос

Java spring security можно ли в место логина авторизовывать по номеру телефона?

Я использую java spring mvc прикрутил spring security, в реализации из коробки он ваторизуюет по логину и паролю, мне нужно изменить поведения и в место логина получать и авторизовывать по номеру телефона. Как можно это реализовать, гугление не сильно помогло, все время выдает базовые настройки spring security.
  • Вопрос задан
  • 297 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
@seeyoga Автор вопроса
Может кому то поможет. В конфигурации можно переопределить поля по которое будет парситься из отправленой формы. Нужно добавть параметр

usernameParameter("phone")


Пример конфигурации
package com.mekenim.callboard.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.password.NoOpPasswordEncoder;

import javax.sql.DataSource;

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private DataSource dataSource;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                    .antMatchers("/", "/card/{id}","/subcategory/{id}","/category/{categoryId}","/registration","/confirm-phone-number").permitAll()
                    .anyRequest().authenticated()
                .and()
                    .formLogin()
                    .usernameParameter("phone")
                    .loginPage("/login")
                    .permitAll()
                .and()
                    .logout()
                    .permitAll();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.jdbcAuthentication()
                .dataSource(dataSource)
                .passwordEncoder(NoOpPasswordEncoder.getInstance())
                .usersByUsernameQuery("select phone, password, activate from user_tab where phone = ?")
                .authoritiesByUsernameQuery("select u.phone, ur.roles from user_tab u inner join user_role ur on u.id = ur.user_id where u.phone=?" );
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы