Итак, у меня есть рабочий интерфейс с Angular2 и работающий бэкэнд с Java, и я должен служить моему index.html из статической папки, которая также содержит все мои внешние ресурсы. Проблема в том, что когда я попытался добавить Spring Security на бэкэнд, ресурсы больше не доступны из-за аннотации @EnableWebSecurity. Когда я перехожу к моему localhost http://localhost:8080/, index.html не обслуживается. Но если я получаю доступ к нему или любому другому ресурсу, пишущему путь вручную, он загружается. Я не хотел бы обслуживать свой интерфейс по-разному, есть ли способ сделать это со статики? Я попытался следующие:Serve Angular 2 project from static folder with Spring Security
Вот моя конфигурация безопасности:
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
@ComponentScan(basePackages = {"com.ramso.restapi.security"})
public class SecurityConfig extends WebSecurityConfigurerAdapter {
private static final Logger logger = LoggerFactory.getLogger(SecurityConfig.class);
public static final String REMEMBER_ME_KEY = "rememberme_key";
public SecurityConfig() {
super();
logger.info("loading SecurityConfig ................................................ ");
}
@Autowired
private UserDetailsService userDetailsService;
@Autowired
private RestUnauthorizedEntryPoint restAuthenticationEntryPoint;
@Autowired
private AuthenticationSuccessHandler restAuthenticationSuccessHandler;
@Autowired
private AuthenticationFailureHandler restAuthenticationFailureHandler;
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService);
}
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/front/**","/index.html");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.headers().disable()
.csrf().disable()
.authorizeRequests()
.antMatchers("/failure").permitAll()
.anyRequest().authenticated()
.and()
.exceptionHandling()
.authenticationEntryPoint(restAuthenticationEntryPoint)
.and()
.formLogin()
.loginPage("/login")
.loginProcessingUrl("/authenticate")
.successHandler(restAuthenticationSuccessHandler)
.failureHandler(restAuthenticationFailureHandler)
.usernameParameter("username")
.passwordParameter("password")
.permitAll()
.and()
.logout()
.logoutUrl("/logout")
.logoutSuccessHandler(new HttpStatusReturningLogoutSuccessHandler())
.deleteCookies("JSESSIONID")
.permitAll()
.and();
}
}
WebMvcConfiguration:
@Configuration
public class WebMvcConfiguration extends WebMvcConfigurerAdapter {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
//registry.addViewController("/").setViewName("front/index.html");
//registry.addViewController("/").setViewName("forward:/index.html");
registry.addViewController("/").setViewName("redirect:/index.html");
registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
}
}
Application.java:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
прямо в статике или в папке спереди, src/main/resources/static/front? – Tom
Я попробовал оба, прямо сейчас у меня есть это в src/main/resources/static/front – Battalgazi
Можете ли вы попытаться получить доступ к определенному ресурсу, чтобы узнать, есть ли проблема с муравьем-совместителем или выставляете свой index.html? Если у вас возникли проблемы с экспонированием вашего index.html (если он находится в передней папке), я могу добавить соответствующий код, чтобы разоблачить его в моем ответе. – Tom