У меня недавно создали приложение jhipster со следующим .yo-rc.jsonКроме маркеров аутентификации на основе, позволяет REST API конечной точку с базовой HTTP-аутентификация
{
"generator-jhipster": {
"baseName": "cmpayments",
"packageName": "au.com.cmx.myapp",
"packageFolder": "au/com/cmx/myapp",
"authenticationType": "token",
"hibernateCache": "no",
"clusteredHttpSession": "no",
"websocket": "no",
"databaseType": "sql",
"devDatabaseType": "postgresql",
"prodDatabaseType": "postgresql",
"useCompass": false,
"buildTool": "maven",
"frontendBuilder": "gulp",
"javaVersion": "8"
}
}
Мне нравится, аутентификация на основе знамения на webapp, но я хотел бы, чтобы сервер выставлял REST api-вызов только с помощью HTTP-аутентификации. Некоторое время я сражался, но я совершенно не знаком с весенней безопасностью, и я надеюсь, что кто-то уже это сделал и может мне помочь.
Я попробовал следующее решение здесь: Basic and form based authentication with Spring security Javaconfig
Я создал вторую конфигурацию с @Order (1) в SecurityConfiguration.java как так
@Configuration
@Order(1)
public static class ApiWebSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter {
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication().withUser("api").password("pass").roles("API");
}
protected void configure(HttpSecurity http) throws Exception {
http
.csrf()
.disable()
.authorizeRequests()
.antMatchers("/basicAuthApi/**").hasRole("API")
.and()
.httpBasic();
}
}
Это работает. Если я попал в конечную точку под/basicAuthApi с чем-то другим, кроме api/pass credentials, я получаю 401. Yay.
Однако после этого, когда я вхожу в систему webapp как admin/admin (или пользователь/пользователь), я вошел в систему как anonymousUser. Если я прокомментирую дополнительную @Configuration в SecurityConfiguration.java и перезапустил приложение, эта проблема исчезнет, и я правильно зарегистрируюсь в качестве администратора (или пользователя).
Интересно, что я попытался изменить порядок второй @Configuration на @Order (101), потому что я увидел где-то в одном из базовых классов @Order (100). В этом случае администратор и пользователь входят в систему при работе с webapp. Но оставшийся вызов api больше не защищен, и он преуспевает даже с неправильным паролем.
Кто-нибудь знает, что я делаю неправильно?
Благодаря dalyc