2017-11-14 4 views
3

Ich bin ein Backend-Entwickler und ich stelle eine Spring Boot Rest API mit JWT Sicherheit für einen Front-End-Entwickler, der die API von lokalen Host anruft. So, wenn er eine POST-Anfrage er anruft sagt er ein CORS error.So I bekommt den TeilWie erlaube ich Querherkunftsanfrage

@Override 
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException { 


     response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin")); 
     response.setHeader("Access-Control-Allow-Credentials", "true"); 
     response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); 
     response.setHeader("Access-Control-Max-Age", "3600"); 
     response.setHeader("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With, remember-me"); 


     chain.doFilter(request, response); 
    } 

Aber immer noch wird er die error.What sein kann, die cause.Any Hilfe ist willkommen

OPTIONS https:my.domain/url 401 (Unauthorized) 

, wenn es sich um eine POST-Anfrage hinzugefügt.

Controller-Code:

@RestController 
public class DGSUserRegistrationController { 



    @Autowired 
    @Qualifier("restTemplateUserRegitration") 
    private RestTemplate restTemplateUserRegitration; 
@RequestMapping(value="${user.endpoint}",produces={MediaType.APPLICATION_JSON_VALUE},method=RequestMethod.POST) 
    public ResponseEntity<?> registerUser(@RequestBody Model ModelRequest){ 

       Map<String, Object> Status=new HashMap<String, Object>(); 
       FeedBackStatus = restTemplateUserRegitration.postForObject("http:serviceurl",registration/single",Model.class,Map.class); 
       return ResponseEntity.ok(Status); 
    } 
} 
+0

[Siehe diesen Link] (http://www.codingpedia.org/ama/how-to-add-cors-support-on-the- Server-Side-in-Java-mit-Trikot /) es könnte helfen und [diesen Link] (https://spring.io/blog/2015/06/08/cors-support-in-spring-framework) zu –

+2

Klare Problemaussage. Relevanter Code. Kein * irrelevanter * Code. Meine Güte, es ist ... eine gute Frage! (@ joker21: sie sind nur relativ selten, so scheint es, von neueren Mitgliedern. Nice one.) –

+0

Ich denke, dass das Problem auf der Serverseite ist, dass es nicht CORS aktiviert hat, so sogar die Einrichtung Ihrer Kopfzeile können Sie ' t den Anruf tätigen. – canillas

Antwort

-1

Versuchen Sie, diese erste, das alle Ursprünge lassen sollte, aber es ist Sicherheitsrisiko.

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

Das OP gibt eindeutig den Ursprung des Anrufs an, der korrekt ist. –

+0

@ T.J.Crowder Echte Frage, was wäre der Unterschied zur Einstellung von Access-Control-Allow-Origin auf den gleichen Wert wie getHeader ("Origin")? – jontro

+0

@jontro: Wahrscheinlich keine signifikante. Der obige Punkt ist, dass das OP den Header bereits auf einen gültigen Wert setzt (fast sicher), so dass dies die Frage nicht beantwortet. –

0

Dies ist eine Option. Nicht sicher, ob es ein eleganter ist

@Bean 
    public FilterRegistrationBean corsFilter() { 
    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); 
    CorsConfiguration config = new CorsConfiguration(); 
    config.setAllowCredentials(true); 
    config.addAllowedOrigin("*"); 
    config.addAllowedHeader("*"); 
    config.addAllowedMethod("*"); 
    source.registerCorsConfiguration("/**", config); 
    FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source)); 
    bean.setOrder(0); 
    return bean; 
    } 

Setzen Sie dieses in irgendeine Frühlingsbohne.

+0

Wie beantwortet das die Frage? Warum muss das OP dies tun? Code-Dumps sind keine * nützlichen * Antworten. –

-1

Sie sollten einen Filter wie folgt implementieren:

public class CORSFilter extends OncePerRequestFilter { 

    private final Logger LOG = LoggerFactory.getLogger(CORSFilter.class); 

    @Override 
    protected void doFilterInternal(HttpServletRequest req, HttpServletResponse res, FilterChain chain) throws ServletException, IOException { 
     LOG.info("Adding CORS Headers ........................");   
     res.setHeader("Access-Control-Allow-Origin", "*"); 
     res.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS"); 
     res.setHeader("Access-Control-Max-Age", "3600"); 
     res.setHeader("Access-Control-Allow-Headers", "X-PINGOTHER,Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers,Authorization"); 
     res.addHeader("Access-Control-Expose-Headers", "xsrf-token"); 
     if ("OPTIONS".equals(req.getMethod())) { 
     res.setStatus(HttpServletResponse.SC_OK); 
     } else { 
     chain.doFilter(req, res); 
     }   
    } 
} 

diese von der Post gefunden Cross Origin Request Blocked Spring MVC Restful Angularjs

Hope this Hilfe!

0

Sie können Ihre eigenen CorsConfiguration

@EnableWebSecurity 
class SecurityConfig extends WebSecurityConfigurerAdapter { 

CorsConfigurationSource corsConfigurationSource = new CorsConfigurationSource() { 
    @Override 
    public CorsConfiguration getCorsConfiguration(HttpServletRequest request) { 
     CorsConfiguration corsConfiguration = new CorsConfiguration(); 
     corsConfiguration.addAllowedOrigin("http://localhost:63342"); 
     corsConfiguration.addAllowedHeader("Authorization"); 
     corsConfiguration.setAllowedMethods(Arrays.asList("POST", "GET")); 
     corsConfiguration.setMaxAge(3600L); 
     return corsConfiguration; 
    } 
}; 

und fügen Sie Konfiguration erstellen.

.and().cors().configurationSource(corsConfigurationSource); 

und versuchen, diese Anmerkung mit

@CrossOrigin 
Verwandte Themen