Merhaba. Spring-de Restful servis yazdım.Kullanıcıadı ve şifre gönderiyorum ve bana loginin cevabını json ile gönderiyor.

Benim jsp sayfam:

<%@page contentType="text/html; charset=UTF-8" %> 
<%@page import="java.util.List"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<?xml version="1.0" encoding="UTF-8" ?>
<body onload="check()">
    <script>
        function check() {
            var data = {};
            data['username'] = 'test';
            data['password'] = 'test';

            var xhr = new XMLHttpRequest();
            xhr.open("POST", "http://172.16.6.15:8080/DYP-0.0.1/user/login", true);
            xhr.setRequestHeader('Content-Type', 'application/json');

            xhr.send(JSON.stringify(data));
        }
    </script>
 </body>

bu applicationı glassfishe deploy edip kullana biliyorum.Çünkü javascript içinde bulunduğu applicationa sorgu gönderiyor.Amma ben sadece html sayfası yazıp başka bir yerden linke sorgu gönderdiğimde error veriyor ve method type olarak OPTİONS gösteriyor.Glassfishin dışarıdan sorgu göndermesine izin vermiyor.Izine vermesi için şu kodları da ilave etdim:

            xhr.setRequestHeader('Content-Type', 'application/json');

            xhr.setRequestHeader('Access-Control-Allow-Origin', '*');
            xhr.setRequestHeader('Access-Control-Allow-Credentials', 'true');
            xhr.setRequestHeader('Access-Control-Allow-Methods', 'POST, PUT, GET, DELETE, HEAD, OPTIONS');

            xhr.setRequestHeader("Access-Control-Allow-Headers", "Authorization, Origin, X-Requested-With, Content-Type");
            xhr.setRequestHeader("Access-Control-Expose-Headers", "Location, Content-Disposition");

Ama sonuç aynı

alt text

soruldu: 30 Eki '14, 05:40

Serxan's gravatar image

Serxan
51691106107
cevap kabul oranı: 46%

değiştirildi: 30 Eki '14, 07:19


Sorunun cevabını buldum.

Benim sorgumda POST ile user login yapmaya çalışıyordum.Methodu çağırdığım zaman browser benim sorgumdan önce OPTIONS methoduyla sorgu gönderiyordu ve applicationdan senin serverinin hangi tür methodlara (POST,GET,DELETE ve s) izin verdiğini,bu servere hangi serverlerden ulaşıla bileceğini ve s. soruyordu. Mesela senin service-in 142.16.6.12 serverinde ve sen diğer serverlerden ulaşılmasını istemiyorsun ve s. Bunun gibi ayarları browser OPTIONS method göndererek senden soruyor. Şimdi OPTIONS sorgusuna nasıl cevap veriyoruz?

Spring-de bir filter classı oluşturuyoruz.Buna CORS filtering deniyor.Bu classın isminden önce yazdığımız @Component anotasyonu ve extends OncePerRequestFilter applicationin bu classı CORS filter gibi tanımasını sağlıyor.(ne yalan söyleyeyim @Component-in ne için olduğunu tam bilmiyorum :D )

    import java.io.IOException;

    import javax.servlet.FilterChain;

    import javax.servlet.ServletException;

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import org.springframework.stereotype.Component;
    import org.springframework.web.filter.OncePerRequestFilter;

    @Component
    public class SimpleCORSFilter extends OncePerRequestFilter {

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

        if (request.getHeader("Access-Control-Request-Method") != null && "OPTIONS".equals(request.getMethod())) {
                String originHeader = request.getHeader("Origin");

                response.addHeader("Access-Control-Allow-Origin", originHeader);

                response.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
                response.addHeader("Access-Control-Allow-Headers", "Content-Type");
                response.addHeader("Access-Control-Max-Age", "1800");
            }

            filterChain.doFilter(request, response);
        }

    }
permanent link

cevaplandı: 02 Ara '14, 01:11

Serxan's gravatar image

Serxan
51691106107
cevap kabul oranı: 46%

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×128
×27
×15

Soruldu: 30 Eki '14, 05:40

Görüntüleme: 680 kez

Son güncelleme: 02 Ara '14, 01:11

powered by BitNami OSQA