Spring + OAuth, błąd związany z cors

0

Hej, mam apkę restową napisaną w Springu(nie boot). Dodałem OAutha2 i próbuje się teraz połączyć z clientem.
Clienet w Angularze2. Miałem problemy z CORSem, dodałem filtr bo metody ze strony springa nie działały. I teraz jak jest wszystko poprawne, to działa. Zwraca 200, dostaje dane. Ale jak nie jestem zalogowany, to dostaje
"GET localhost: 8080/endpoint 401 ()"
"Failed to load localhost: 8080/endpoint: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'localhost: 4200' is therefore not allowed access. The response had HTTP status code 401."
A jak wyrzuce sobie w konsoli błąd to jest "Status code 0, Unknown Error".

Rozumiem że to jest wina servera? Jak dodać ten header do /oauth/token ?
Tak wygląda mój filter:

@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class CORSFilter implements Filter {
    @Override
    public void init(FilterConfig fc) throws ServletException {
    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse resp,
                         FilterChain chain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) resp;
        HttpServletRequest request = (HttpServletRequest) req;
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "PATCH,POST,GET,OPTIONS,DELETE");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Headers", "x-requested-with, authorization, Content-Type, Authorization, credential, X-XSRF-TOKEN");

        if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
            response.setStatus(HttpServletResponse.SC_OK);
        } else {
            chain.doFilter(req, resp);
        }

    }

    @Override
    public void destroy() {
    }
}
0

A tu nie chodzi o brak @CrossOrigin w kontrolerze?

0
[Shalom napisał(a)]:

A tu nie chodzi o brak @CrossOrigin w kontrolerze?

Niestety nie. @CrossOrigin jest dodany do kontrolera.
Ogólnie to ten endpoint działa i zwraca 200, no wszystko wygląda okej. Ten komunikat dopiero się pojawia wtedy gdy server zwraca 401.

0

a jaki masz config spring security?

0
filemonczyk napisał(a):

a jaki masz config spring security?

 @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/login").antMatchers(HttpMethod.OPTIONS);
    }

    @Bean
    @Override
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.cors()
                .and()
                .csrf().disable();
    }
0

niedawno sam meczylem sie z podobnym tematem, myslaem ze moze w chainie nie masz corsa, u mnie problem rozwiazala konfiguracja corsow "po bozemu" tj webmvcconfigrer w springu, bez haczenia filtrem,

0

@filemonczyk: no ja jak 'po bozemu' ustawiam to mi w ogóle nie działa nic. Wywala ten konflikt originsów przy normalnych zapytaniach. A tutaj jak mam filtry to tylko jak OAuth wysyła response z 401. ;)

0

mialem podobnie, spring security blokuje Tobie spring webmvc i request nawet nie 'dochodzi' do teog konfigu. Wroc do tej konfiguracji globalnej corsow, i gdy nie bedzie dzialac to dodaj adnotacje nad jakims testowym kontrollerem, @CorsOrigin( tutaj allow *, nie pamietam skladni) jezeli strzal w ten kontroler bedzie dzialac a reszte nie, to z grubsza mozna zalozyc ze to co napisalem w 1 zdaniu jest prawda.
Jezeli nie jet to komercyjny projekt to podaj link do repo

0

Witam,

Obecnie zmagam się z dokładnie tym samym problemem, utworzyłem też wątek na StackOverflow w tym temacie
https://stackoverflow.com/questions/48158640/how-to-enable-cors-for-error-response-in-spring-mvc
Póki co NIE udało mi się znaleźć obejścia dla tego problemu ....Grzeg0rz a u Ciebie ...jakiś postęp ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1