Я реализую простой вход в систему для проекта начальной загрузки, где у меня есть локальная база данных 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 .