Spring Boot Security CORS

我在Spring Security URL上的CORS过滤器有问题。它不会设置Access-Control-Allow-

Origin和其他公开的标头属于Spring sec(登录/注销)或由Spring Security过滤的URL。

这是配置。

@Configuration

@EnableWebMvc

public class MyWebMvcConfig extends WebMvcConfigurerAdapter {

********some irrelevant configs************

@Override

public void addCorsMappings(CorsRegistry registry) {

registry.addMapping("/*").allowedOrigins("*").allowedMethods("GET", "POST", "OPTIONS", "PUT")

.allowedHeaders("Content-Type", "X-Requested-With", "accept", "Origin", "Access-Control-Request-Method",

"Access-Control-Request-Headers")

.exposedHeaders("Access-Control-Allow-Origin", "Access-Control-Allow-Credentials")

.allowCredentials(true).maxAge(3600);

}

}

@Configuration

@EnableWebSecurity

public class OAuth2SecurityConfiguration extends WebSecurityConfigurerAdapter {

@Override

protected void configure(HttpSecurity http) throws Exception {

http

.exceptionHandling().authenticationEntryPoint(authenticationEntryPoint).and()

.formLogin()

.successHandler(ajaxSuccessHandler)

.failureHandler(ajaxFailureHandler)

.loginProcessingUrl("/authentication")

.passwordParameter("password")

.usernameParameter("username")

.and()

.logout()

.deleteCookies("JSESSIONID")

.invalidateHttpSession(true)

.logoutUrl("/logout")

.logoutSuccessUrl("/")

.and()

.csrf().disable()

.anonymous().disable()

.authorizeRequests()

.antMatchers("/authentication").permitAll()

.antMatchers("/oauth/token").permitAll()

.antMatchers("/admin/*").access("hasRole('ROLE_ADMIN')")

.antMatchers("/user/*").access("hasRole('ROLE_USER')");

}

}

因此,如果我向安全性未监听的网址发出请求,则会设置CORS标头。Spring安全URL-未设置。

回答:

您可以编写自己的CorsFilter并将其添加到安全配置中,而不必使用CorsRegistry。

public class CorsFilter implements Filter {

@Override

public void init(FilterConfig filterConfig) throws ServletException {

}

@Override

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

HttpServletResponse response = (HttpServletResponse) servletResponse;

HttpServletRequest request= (HttpServletRequest) servletRequest;

response.setHeader("Access-Control-Allow-Origin", "*");

response.setHeader("Access-Control-Allow-Methods", "GET,POST,DELETE,PUT,OPTIONS");

response.setHeader("Access-Control-Allow-Headers", "*");

response.setHeader("Access-Control-Allow-Credentials", true);

response.setHeader("Access-Control-Max-Age", 180);

filterChain.doFilter(servletRequest, servletResponse);

}

@Override

public void destroy() {

}

}

@Configuration

@EnableWebSecurity

public class OAuth2SecurityConfiguration extends WebSecurityConfigurerAdapter {

@Bean

CorsFilter corsFilter() {

CorsFilter filter = new CorsFilter();

return filter;

}

@Override

protected void configure(HttpSecurity http) throws Exception {

http

.addFilterBefore(corsFilter(), SessionManagementFilter.class) //adds your custom CorsFilter

.exceptionHandling().authenticationEntryPoint(authenticationEntryPoint).and()

.formLogin()

.successHandler(ajaxSuccessHandler)

.failureHandler(ajaxFailureHandler)

.loginProcessingUrl("/authentication")

.passwordParameter("password")

.usernameParameter("username")

.and()

.logout()

.deleteCookies("JSESSIONID")

.invalidateHttpSession(true)

.logoutUrl("/logout")

.logoutSuccessUrl("/")

.and()

.csrf().disable()

.anonymous().disable()

.authorizeRequests()

.antMatchers("/authentication").permitAll()

.antMatchers("/oauth/token").permitAll()

.antMatchers("/admin/*").access("hasRole('ROLE_ADMIN')")

.antMatchers("/user/*").access("hasRole('ROLE_USER')");

}

}

以上是 Spring Boot Security CORS 的全部内容, 来源链接: utcz.com/qa/405695.html

回到顶部