私はAngular2で作業中のフロントエンドとJavaで動作するバックエンドを持っており、私のフロントエンドリソースを含んでいる静的フォルダからindex.htmlを提供しています。問題は、バックエンドにSpring Securityを追加しようとすると、@EnableWebSecurityアノテーションのためにリソースにアクセスできなくなることです。ローカルホストhttp://localhost:8080/に移動すると、index.htmlは配信されません。しかし、パスまたは手動でパスを書いている他のリソースにアクセスすると、ロードされます。 私はフロントエンドに異なったサービスを提供したくないです。静的からこれを行う方法はありますか?私は、次のことを試してみました:サービスSpring Securityの静的フォルダから角度2のプロジェクト
ここに私のセキュリティ設定:
@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
特定のリソースにアクセスして、問題がant matcherかindex.htmlかどうかを調べることができますか? index.htmlを公開する際に問題が発生した場合は(フロントフォルダにあると仮定して)、関連するコードを追加して回答に表示することができます。 – Tom