Я следил за этим и этим руководством, чтобы создать скелет приложения Angular.JS с основанной на Java бэкэнд. Его код можно найти здесь.
У него есть аутентификация - в начале Spring загружает на консоль случайный пароль, который вы можете использовать для входа в запущенное приложение. Имя user
- user
и пароль запускается в консоли в начале:
Теперь я хочу иметь несколько учетных записей пользователей с фиксированными паролями (это нормально, если они жестко закодированы).
Как я могу сделать это в этом приложении, не нарушая совместимость с AngularJS?
Я полагаю, что мне нужно изменить SecurityConfiguration
в UiApplication и использовать что-то вроде
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("user")
.password("password")
.roles("USER");
}
как объяснено здесь, но я не уверен, что он не сломает AngularJS.
Что решение:
@Configuration
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
class SecurityConfiguration extends
WebSecurityConfigurerAdapter {
@Autowired
public void registerAuthentication(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("user1")
.password("password1")
.roles("ADMIN")
.and()
.withUser("user2")
.password("password2")
.roles("USER");
}
Это не нарушит угловой совместимости. Но в дополнение к изменению кода, о котором вы говорили, вам также необходимо убедиться, что вы разрешаете доступ к URI/login URI анонимно. Также потребуется изменить ваш перегруженный метод configure, а именно:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.httpBasic()
.and()
.authorizeRequests()
.antMatchers("/login.html").permitAll()
.antMatchers("/index.html", "/home.html").authenticated()
.antMatchers("/index.html", "/home.html").hasRole("USER")
.anyRequest().authenticated();
}
Пока вы не меняете схему аутентификации (например, BASIC, FORM и т.д.), AngularJS не заботится о том, как вы управляете учетными записями пользователей в бэкэнд. Конечно, если бы вы использовали фиксированный пользователь и пароль и его жестко закодировали в коде AngularJS, вам придется изменить это.