Аутентификация путей с помощью Spring Boot Security и локальной базы данных (h2) - PullRequest
0 голосов
/ 03 апреля 2019

Я реализую простой вход в систему для проекта начальной загрузки, где у меня есть локальная база данных h2, в которой хранятся учетные данные пользователя:

application.yaml:

spring:
  application:
    name: user-service
  datasource:
    url: jdbc:h2:./dbUser
    username: sa
    password:
    driver-class-name: org.h2.Driver
  h2:
    console:
      enabled: true
      path: /h2-console/user
  jpa:
    hibernate:
      ddl-auto: update
    properties:
      hibernate:
        show_sql: true

IЯ использую Spring Security для создания логина для аутентификации пользователей и предоставления им доступа к API.Для этого я внедрил службу, которая ищет пользователя в базе данных и возвращает его, если доступно:

UserAuthService.java:

@Service
public class UserAuthService implements UserDetailsService{

    @Autowired
    private UserCredentialsRepository userCredentialsRepository;

    @Override
    @Transactional
    public UserDetails loadUserByUsername(String username){
        UserCredentials userCredentials = userCredentialsRepository.findByUsername(username);
        if(userCredentials==null) throw new UsernameNotFoundException(username);
        Set<GrantedAuthority> grantedAuthoritySet = new HashSet<>();
        grantedAuthoritySet.add(new SimpleGrantedAuthority("USER"));

        return new User(userCredentials.getUsername(), userCredentials.getPassword(), grantedAuthoritySet);
    }
}

UserCredentialsRepository.java

public interface UserCredentialsRepository extends CrudRepository<UserCredentials, Long> {
    UserCredentials findByUsername(String username);

    UserCredentials findByUserId(Long id);
}

Мой класс конфигурации для веб-безопасности: WebSecurityConfig.java:

@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception{

        http.csrf().disable()
                .authorizeRequests()
                .antMatchers("/login").permitAll()
                .and()
                .authorizeRequests()
                .antMatchers(HttpMethod.GET, "/users").permitAll()
                .and()
                .authorizeRequests()
                .antMatchers("/h2-console/user/**").permitAll()
                .anyRequest()
                .authenticated()
                .and()
                .httpBasic();
        http.headers().frameOptions().disable();
    }
}

Я создал страницу входа в систему с Angular, которая использует API / функцию нижнего контроллера и предоставляет ввод учетных данных череззапрос http.post.

@RequestMapping("/login")
public boolean login(@RequestBody UserCredentials userCredentials) {
    UserDetails userDetails = userAuthService.loadUserByUsername(userCredentials.getUsername());
    return
            userCredentials.getUsername().equals(userDetails.getUsername()) && userCredentials.getPassword().equals(userDetails.getPassword());
    }

Моя проблема: Доступ к базе данных и ответ через вышеуказанную функцию контроллера работает нормально, но я не знаю, как авторизовать все пути, если вышеуказанный контроллерфункция возвращает true .

...