Я работаю с веб-приложением Spring Boot 1.5.2 и хочу защитить существующие конечные точки API с помощью аутентификации HTTP Basi c.
Вот что я настроил до сих пор через Spring Security :
CustomAuthenticationProvider. java
@Component
public class CustomAuthenticationProvider implements AuthenticationProvider {
@Autowired
private UserService userService;
@Autowired
private BCryptPasswordEncoder bCryptPasswordEncoder;
@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
if (isCredentialValid(authentication)) {
return new UsernamePasswordAuthenticationToken(authentication.getName(), authentication.getCredentials().toString(), Collections.emptyList());
}
throw new BadCredentialsException("User authentication failed for user " + authentication.getName());
}
private boolean isCredentialValid(Authentication authentication) {
String username = authentication.getName();
String password = authentication.getCredentials().toString();
User databaseUser = userService.findUserByUsername(username);
return databaseUser != null && bCryptPasswordEncoder.matches(password, databaseUser.getPassword());
}
@Override
public boolean supports(Class<?> authentication) {
return authentication.equals(UsernamePasswordAuthenticationToken.class);
}
}
SecurityConfig. java
@Configuration
@EnableGlobalMethodSecurity(securedEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private CustomAuthenticationProvider customAuthenticationProvider;
@Autowired
public void configAuthentication(AuthenticationManagerBuilder auth) {
auth.authenticationProvider(customAuthenticationProvider);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.httpBasic().and()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
.authorizeRequests().antMatchers("/orders/**").authenticated();
}
}
Это прекрасно работает для одного пользователя, но у меня есть следующие требования:
Требование 1
Пользователь demo1
должен иметь доступ только к следующему:
POST /orders/info
GET /orders/:id
Требование 2
Пользователь demo2
должен иметь доступ только к следующему:
POST /orders