Я прохожу весенний урок здесь https://spring.io/guides/tutorials/spring-security-and-angular-js/#_the_login_page_angular_js_and_spring_security_part_ii
Поскольку я использую boot 2.0, есть некоторые настройки, которые я не смог полностью выполнить, но я не совсем уверен, где или что здесь не так ...
- Не похоже на аутентификацию пользователя через Angular клиент. Пользователь продолжает возвращать ноль.
- Если войти через диалект базовой аутентификации (всплывающее окно), я не могу выйти через Angular клиент. Я получаю http статус 401.
Angular Client запускается через прокси-сервер, но в итоге получает ng build
и dist копируется в весеннюю загрузку maven.
Пружинный ботинок
pom.xml
Все зависимости одинаковы, у меня есть maven-resources-plugin для копирования моего статического ресурса в папку target / classes / static
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>copy-resources</id>
<phase>validate</phase>
<goals><goal>copy-resources</goal></goals>
<configuration>
<!-- goes in to /target/classes/static -->
<outputDirectory>${build.directory}/classes/static/</outputDirectory >
<resources>
<resource>
<directory>${basedir}/security-client/dist/security-client</directory >
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
В руководстве по настройке безопасности контроллер был в одном UiApplication.java. Для собственной практики я разделил их на WebSecurityConfig и UiController.
UiController
@RestController
public class UiController {
Logger logger = LoggerFactory.getLogger(this.getClass());
@RequestMapping("/resource")
public Map<String,Object> home() {
Map<String,Object> model = new HashMap<String,Object>();
model.put("id", UUID.randomUUID().toString());
model.put("content", "Hello World");
String sessionId = RequestContextHolder.currentRequestAttributes().getSessionId();
logger.info("Session ID: {} ", sessionId );
return model;
}
@RequestMapping("/user")
public Principal user(Principal user) {
logger.info("{}", user);
return user;
}
WebSecurityConfig
@Configuration
@Order(SecurityProperties.BASIC_AUTH_ORDER)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
Logger logger = LoggerFactory.getLogger(this.getClass());
@Override
protected void configure(HttpSecurity http) throws Exception{
http.httpBasic()
.and()
.authorizeRequests()
.antMatchers("/index.html", "/", "/home", "/login").permitAll()
.anyRequest().authenticated()
.and().csrf()
.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
}
}
В учебном приложении application.yml, чтобы разрешить JavaScript-компоненты, предоставляемые Angular, анонимно доступны для приложения
security:
ignored:
- "*.bundle.*"
Но поскольку свойства Spring boot 2.0 устарели, люди в стеке предлагают добавить следующее в мой WebSecurityConfig
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/**");
}
- Возможно, потому что я отделил конфигурацию безопасности от
UiApplication Мне нужна дополнительная информация, чтобы сообщить UiApplication основной
способ найти WebSecurity?
- Из консоли Chrome> Приложение под файлами cookie, я не вижу ни токена JSESSIONID, ни X-XSRF. Может быть, я неправильно настраиваю свой проект, чтобы токены не передавались?
- Любые ресурсы о том, как решать проблемы, также были бы великолепны.