Я пытаюсь настроить базовую HTTP-аутентификацию Spring Boot-Embedded Tomcat с несколькими ролями, причем большинство URL-адресов похожи, но некоторые из них специфичны для каждой роли. Здесь для первой роли всплывает базовая HTTP-аутентификация и работает нормально. С кодом ниже,
@Configuration
@EnableWebMvcSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class TestSecurityAdapter extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests().antMatchers(null, getAppAdminRolePaths()).authenticated()
.anyRequest().hasAnyRole("APPADMIN")
.and()
.httpBasic();
http.csrf().disable()
.authorizeRequests().antMatchers(null, getAppUserRolePaths()).authenticated()
.anyRequest().hasAnyRole("APPUSER")
.and()
.httpBasic();
http.authorizeRequests().antMatchers(null, new String[]{"/app/appOwnerView.html"}).authenticated()
.anyRequest().hasAnyRole("APPOWNER")
.and()
.httpBasic();
}
@Override
@Autowired
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication().withUser("appadminname").password("appadminpwd").roles("APPADMIN").and()
.withUser("appusername").password("appuserpwd").roles("APPUSER").and()
.withUser("appownername").password("appoownerpwd").roles("APPOWNER");
}
private static String[] getAppAdminRolePaths(){
return new String[]{"/appweb/*",
"/app/checkService.html",
"/app/index.html",
"/app/testData.html",
"/app/adminView.html",
"/app/demo.html"};
}
private static String[] getAppUserRolePaths(){
return new String[]{"/appweb/*",
"/app/checkService.html",
"/app/index.html",
"/app/testData.html",
"/app/userView.html",
"/app/demo.html"};
}
}
Для всплывающего окна имени пользователя/пароля HTTP в браузере с URL-адресом http://localhost:8080/app/index.html скажем, с appadminname/appadminpwd все работает нормально. Но для того же URL-адреса, если я ввожу appusername/appuserpwd, он выдает HTTP 403 Forbidden access error. Вот почему вторая настроенная роль APPUSER выдает эту ошибку, я не уверен. Пожалуйста, дайте знать, если какой-то способ решить эту проблему.
Спасибо