Как отключить CORS в безопасности загрузки спринта - PullRequest
0 голосов
/ 03 октября 2019

Я хочу полностью отключить CORS при весенней защите при загрузке, но все, что я пробовал, похоже, не работает

Я попытался добавить пользовательские фильтры и внедрить его как компонент, также я пыталсяотключить cors в WebSecurityConfigurerAdapter. Я также пытался добавить фильтр в метод configure HttpSecurity.

эти некоторые ссылки, которые я уже пробовал:

1: CORS проблемы с безопасностью весенней загрузки .

2: Пружинный фильтр безопасности CORS

мое текущее состояние кода как таковое:


@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {


    private final CustomUserDetailsService customUserDetailsService;
    private final AuthConfigProperties authConfigProperties;

    public WebSecurityConfig(@Lazy CustomUserDetailsService customUserDetailsService, AuthConfigProperties authConfigProperties) {
        this.customUserDetailsService = customUserDetailsService;
        this.authConfigProperties = authConfigProperties;
    }

    @Bean
    @Override
    public AuthenticationManager authenticationManager() throws Exception {
        return super.authenticationManager();
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder(authConfigProperties.getBcryptRounds());
    }

    @Override
    public void configure(HttpSecurity http) throws Exception {
        http
                .requestMatchers()
                .antMatchers("/login", "/logout", "/oauth/authorize")
                .and()
                .logout()
                .deleteCookies("JSESSIONID")
                .permitAll()
                .and()
                .authorizeRequests()
                .anyRequest()
                .authenticated()
                .and()
                .csrf()
                .disable();

        http.cors().disable();

    }


    @Override
    public void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(customUserDetailsService).passwordEncoder(passwordEncoder());
    }

}

при попытке доступа к серверу аутентификации впереди-конец я получаю это сообщение об ошибке:

Доступ к выборке в 'http://localhost:8089/oauth/token' из источника' http://localhost:3000' был заблокирован политикой CORS: Ответ на предпечатный запрос не 't пройти проверку контроля доступа: HTTP не имеет статуса ok.

Ответы [ 2 ]

1 голос
/ 04 октября 2019

этот код работает:


import com.example.myAuthServer.service.CustomUserDetailsService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Lazy;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {


    private final CustomUserDetailsService customUserDetailsService;
    private final AuthConfigProperties authConfigProperties;

    public WebSecurityConfig(@Lazy CustomUserDetailsService customUserDetailsService, AuthConfigProperties authConfigProperties) {
        this.customUserDetailsService = customUserDetailsService;
        this.authConfigProperties = authConfigProperties;
    }

    @Bean
    @Override
    public AuthenticationManager authenticationManager() throws Exception {
        return super.authenticationManager();
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder(authConfigProperties.getBcryptRounds());
    }

    @Override
    public void configure(HttpSecurity http) throws Exception {
        http
                .cors()
                .and()
                .requestMatchers()
                .antMatchers("/login", "/logout", "/oauth/authorize")
                .and()
                .logout()
                .deleteCookies("JSESSIONID")
                .permitAll()
                .and()
                .authorizeRequests()
                .anyRequest()
                .authenticated()
                .and()
                .csrf()
                .disable();


    }


    @Override
    public void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(customUserDetailsService).passwordEncoder(passwordEncoder());
    }

}

, но для того, чтобы получить красный цвет ошибки, показанной в исходном сообщении, вам просто нужно, чтобы браузер знал, что запрошенный URL-адрес сервера имеет то же самое "РазрешитьURL ответа Control-Access-Origin ".

Мы можем сделать это, применив прокси на стороне клиента. В моем случае я использую реагирование.

добавьте файл с именем setupProxy.js вsrc directory.

, затем напишите следующий код:

const proxy = require("http-proxy-middleware");


module.exports = function (app) {
    app.use(proxy("/oauth/token", {target: "http://localhost:8089"})); // put your host and api
};

и используйте его так:

fetch("/oauth/token", {
            method: "POST",
            body: qs.stringify(Auth.bodyForNewToken(username, password)),
            headers: {
                "Content-Type": "application/x-www-form-urlencoded",
                Authorization: "Basic " + btoa("<CLIENT>:<SECRET>")
            }
        });

этот код просто подсказка, ВЫНУЖНО ИЗМЕНИТЬ НЕОБХОДИМЫЕ ЛИНИИ !!!.

0 голосов
/ 04 октября 2019

Один из способов справиться с этим - добавить WebMvcConfigurer . Хотя, используя это, вы должны учитывать среду profile (dev, prod и т. Д.), И вы можете оставить WebSecurityConfigurerAdapter со значением конфигурации cors по умолчанию. (не нужно его отключать)

Пример:

@Configuration
public class WebMvc implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedMethods("*")
                .allowedOrigins("*");
    }
}
...