Внедрение Spring Security без роли пользователя

Я хочу реализовать Spring Security без роли пользователя. Я пробовал это:

Я хочу настроить Spring Security для использования базы данных для запросов Rest api. Я пробовал это:

    @Configuration
    @EnableWebSecurity
    @Import(value= {Application.class, ContextDatasource.class})
    @ComponentScan(basePackages= {"org.rest.api.server.*"})
    public class ApplicationSecurityConfig extends WebSecurityConfigurerAdapter {

        @Autowired 
        private RestAuthEntryPoint authenticationEntryPoint;

        @Autowired
        MyUserDetailsService myUserDetailsService;

        @Autowired
        public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
    //      auth
    //      .inMemoryAuthentication()
    //      .withUser("test")
    //      .password(passwordEncoder().encode("testpwd"))
    //      .authorities("ROLE_USER");
            auth.userDetailsService(myUserDetailsService);
            auth.authenticationProvider(authenticationProvider());
        }
        @Bean
        public DaoAuthenticationProvider authenticationProvider() {
            DaoAuthenticationProvider authenticationProvider = new DaoAuthenticationProvider();
            authenticationProvider.setUserDetailsService(myUserDetailsService);
            authenticationProvider.setPasswordEncoder(passwordEncoder());
            return authenticationProvider;
        }
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http
            .authorizeRequests()
            .antMatchers("/securityNone")
            .permitAll()
            .anyRequest()
            .authenticated()
            .and()
            .httpBasic()
            .authenticationEntryPoint(authenticationEntryPoint);
        }
        @Bean
        public PasswordEncoder passwordEncoder() {
            return NoOpPasswordEncoder.getInstance();
        }
    }

Услуга:

    public interface MerchantsService {

        public Merchants getCredentials(String login, String pwd) throws Exception;
    }

Внедрение услуги

@Service
@Qualifier("merchantsService")
@Transactional
public class MerchantsServiceImpl implements MerchantsService {

    @Autowired
    private EntityManager entityManager;

    @Override
    public Merchants getCredentials(String login, String pwd) throws Exception {
        String hql = "select e from " + Merchants.class.getName() + " e where e.login = ? and e.pwd = ?";

        Query query = entityManager.createQuery(hql).setParameter(0, login).setParameter(1, pwd);
        Merchants merchants = (Merchants) query.getSingleResult();

        return merchants;
    }
}

Реализация:

    @Service
        public class MyUserDetailsService implements UserDetailsService {

            @Autowired
            private MerchantsService merchantsService;

            @Override
            public UserDetails loadUserByUsername(String username) {
 Merchants user = merchantsService.getCredentials(username, pwd);

        Set<GrantedAuthority> grantedAuthorities = new HashSet<>();
        for (Role role : user.getRoles()){
            grantedAuthorities.add(new SimpleGrantedAuthority(role.getName()));
        }

        return new User(user.getUsername(), user.getPassword(), grantedAuthorities);
}

        }

У меня 2 проблемы:

  1. Как я могу использовать Spring Security с ролью пользователя?

  2. Как я могу аутентифицировать запросы с помощью имени пользователя и пароля. Я вижу, что public UserDetails loadUserByUsername(String username) может принимать только имя пользователя. Есть ли другой способ реализовать код?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
380
1

Ответы 1

Поскольку Spring Security - это проверка подлинности и авторизация. Вы хотите выполнить аутентификацию самостоятельно, и вам не нужна роль. Тогда почему вы используете Spring Security. Spring Security предоставляет лучший способ выполнить аутентификацию и авторизацию за вас, поэтому следует его использовать. Поскольку у вас уже есть реализация UserDetailsService. Spring Security сама выполняет проверку пароля с помощью настроенного bean-компонента PasswordEncoder.

Другие вопросы по теме

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

Как восстановить данные по типу (видео, текст, изображение) с помощью базы данных Firebase и различных ViewHolders?
Есть ли какая-либо модификация свойства Escape sequence (\ r, \ f, \ b) в новой версии Java
Получение исключения нулевого указателя при запуске Selenium - сценарии TestNG с использованием pagefactory
Подсчет персонажей, только если они находятся рядом друг с другом
Как постоянно читать изменение значения в Firebase (Android)?
Доступ к защищенному паролем URL-адресу сервера Apache
Насколько важно использовать Maven в проекте Spring MVC?
Arraylist для печати объектов с подсчетом
Я хочу создать приложение для рисования, и я хочу увеличивать и уменьшать масштаб всего экрана, может ли кто-нибудь дать мне какое-либо представление о том, как это сделать
У указанного потомка уже есть родитель. Вы должны сначала вызвать removeView () для дочернего родителя при создании настраиваемого класса представления