Spring 启动 - React 无法授权过滤器调用
Spring Boot - React Failed to authorize filter invocation
大家好我是 spring 引导和反应的新手,我正在开发简单的登录应用程序 使用反应 js 和 spring 引导 ,
每当我尝试导航到另一个 API 呼叫(例如注销、欢迎)时,我都会收到以下消息
无法授权具有属性 [已验证] 的过滤器调用 [GET /welcome]
我认为这是 WebSecurityConfigurerAdapter 的问题
寻找合适的解决方案
@Override
protected void configure(HttpSecurity httpSecurity) throws Exception {
httpSecurity.csrf().disable().sessionManagement().sessionFixation().migrateSession().and()
//.addFilterAfter(new AuthenticationFilter(), UsernamePasswordAuthenticationFilter.class).csrf().disable()
.authorizeRequests()
.antMatchers("/").permitAll()
.anyRequest().authenticated()
.and().formLogin().loginPage("/login").and()
.logout()
.logoutUrl("/logout").invalidateHttpSession(true).deleteCookies().clearAuthentication(true)
.permitAll()
.and()
.exceptionHandling().accessDeniedPage("/403").and().httpBasic();
}
handleDashboard() {
axios.get("http://localhost:8080/welcome",{ withCredentials: true }).then(res => {
if (res.data === "success") {
this.props.history.push("/");
} else {
alert("Authentication failure");
}
});
}
WebSecurityConfig
log output
在尝试 spring 安全和 spring 引导后,我找到了根本原因并修复了它,只需在主 class 文件中启用 CORS(全局 CORS配置),将解决上述问题。
ps:即使在其方法级别启用 CORS 也无法正确识别,需要在主 class
中添加它
@Bean
public FilterRegistrationBean<CorsFilter> simpleCorsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.setAllowedOrigins(Arrays.asList("http://localhost:3000"));
config.setAllowedMethods(Collections.singletonList("*"));
config.setAllowedHeaders(Collections.singletonList("*"));
source.registerCorsConfiguration("/**", config);
FilterRegistrationBean<CorsFilter> bean = new FilterRegistrationBean<>(new CorsFilter(source));
bean.setOrder(Ordered.HIGHEST_PRECEDENCE);
return bean;
}
大家好我是 spring 引导和反应的新手,我正在开发简单的登录应用程序 使用反应 js 和 spring 引导 , 每当我尝试导航到另一个 API 呼叫(例如注销、欢迎)时,我都会收到以下消息 无法授权具有属性 [已验证] 的过滤器调用 [GET /welcome] 我认为这是 WebSecurityConfigurerAdapter 的问题 寻找合适的解决方案
@Override
protected void configure(HttpSecurity httpSecurity) throws Exception {
httpSecurity.csrf().disable().sessionManagement().sessionFixation().migrateSession().and()
//.addFilterAfter(new AuthenticationFilter(), UsernamePasswordAuthenticationFilter.class).csrf().disable()
.authorizeRequests()
.antMatchers("/").permitAll()
.anyRequest().authenticated()
.and().formLogin().loginPage("/login").and()
.logout()
.logoutUrl("/logout").invalidateHttpSession(true).deleteCookies().clearAuthentication(true)
.permitAll()
.and()
.exceptionHandling().accessDeniedPage("/403").and().httpBasic();
}
handleDashboard() {
axios.get("http://localhost:8080/welcome",{ withCredentials: true }).then(res => {
if (res.data === "success") {
this.props.history.push("/");
} else {
alert("Authentication failure");
}
});
}
WebSecurityConfig log output
在尝试 spring 安全和 spring 引导后,我找到了根本原因并修复了它,只需在主 class 文件中启用 CORS(全局 CORS配置),将解决上述问题。
ps:即使在其方法级别启用 CORS 也无法正确识别,需要在主 class
中添加它 @Bean
public FilterRegistrationBean<CorsFilter> simpleCorsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.setAllowedOrigins(Arrays.asList("http://localhost:3000"));
config.setAllowedMethods(Collections.singletonList("*"));
config.setAllowedHeaders(Collections.singletonList("*"));
source.registerCorsConfiguration("/**", config);
FilterRegistrationBean<CorsFilter> bean = new FilterRegistrationBean<>(new CorsFilter(source));
bean.setOrder(Ordered.HIGHEST_PRECEDENCE);
return bean;
}