Пружинная загрузка 2.0 + Angular 6 Basic Security - PullRequest
0 голосов
/ 11 сентября 2018

Я прохожу весенний урок здесь https://spring.io/guides/tutorials/spring-security-and-angular-js/#_the_login_page_angular_js_and_spring_security_part_ii

Поскольку я использую boot 2.0, есть некоторые настройки, которые я не смог полностью выполнить, но я не совсем уверен, где или что здесь не так ...

  1. Не похоже на аутентификацию пользователя через Angular клиент. Пользователь продолжает возвращать ноль.
  2. Если войти через диалект базовой аутентификации (всплывающее окно), я не могу выйти через 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. Может быть, я неправильно настраиваю свой проект, чтобы токены не передавались?
  • Любые ресурсы о том, как решать проблемы, также были бы великолепны.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...