স্প্রিং এমভিসিতে নিয়ামক পদক্ষেপ থেকে বাহ্যিক URL এ পুনঃনির্দেশ করুন


118

আমি লক্ষ্য করেছি যে নিম্নলিখিত কোডটি ব্যবহারকারীকে প্রকল্পের ভিতরে থাকা কোনও URL এ পুনঃনির্দেশ করছে,

@RequestMapping(method = RequestMethod.POST)
public String processForm(HttpServletRequest request, LoginForm loginForm, 
                          BindingResult result, ModelMap model) 
{
    String redirectUrl = "yahoo.com";
    return "redirect:" + redirectUrl;
}

যদিও, নিম্নলিখিতটি যথাযথভাবে যথাযথভাবে পুনঃনির্দেশ করছে তবে এর জন্য প্রয়োজন http: // বা https: //

@RequestMapping(method = RequestMethod.POST)
    public String processForm(HttpServletRequest request, LoginForm loginForm, 
                              BindingResult result, ModelMap model) 
    {
        String redirectUrl = "http://www.yahoo.com";
        return "redirect:" + redirectUrl;
    }

আমি এটির মধ্যে একটি বৈধ প্রোটোকল রয়েছে কিনা এবং কোনও দৃশ্যে পুনর্নির্দেশ করতে চাই না সে ক্ষেত্রে নির্দিষ্ট URL টি সর্বদা পুনঃনির্দেশিত করতে চাই। আমি এটা কিভাবে করবো?

ধন্যবাদ,

উত্তর:


208

আপনি এটি দুটি উপায়ে করতে পারেন।

প্রথম:

@RequestMapping(value = "/redirect", method = RequestMethod.GET)
public void method(HttpServletResponse httpServletResponse) {
    httpServletResponse.setHeader("Location", projectUrl);
    httpServletResponse.setStatus(302);
}

দ্বিতীয়ত:

@RequestMapping(value = "/redirect", method = RequestMethod.GET)
public ModelAndView method() {
    return new ModelAndView("redirect:" + projectUrl);
}

19
এটি আরও সহজ যদি আপনি সরাসরি কোনও স্ট্রিং না দিয়ে মডেলএন্ডভিউতে ফিরে যান ler
— daniel.eichten 5'15

24
দেখে মনে হচ্ছে প্রথম পদ্ধতিতে আপনার রিটার্ন কোডটি 302 এ সেট করা উচিত। অন্যথায় কোনও সার্ভার কোড 200 এবং লোকেশন শিরোনাম সহ প্রতিক্রিয়া ফিরিয়ে আনবে যা আমার ক্ষেত্রে পুনর্নির্দেশের কারণ নয় (ফায়ারফক্স ৪১.০)।
— ইভান মুশকেটিক

বাহ্যিক URL- এ পুনঃনির্দেশের সময় আমরা কী কুকি যুক্ত করতে পারি?
— শ্রীকার 0

1
প্রথম পদ্ধতির প্রয়োজন@ResponseStatus(HttpStatus.FOUND)
— ল্যাপ্রক্রিটিনিস

@ রিনাত মুখমাদেগিয়েভ এই মডেলএন্ডভিউতে ("পুনর্নির্দেশ:" + প্রকল্প ইউআরএল); বিবৃতি কী হবে তা ডিফল্ট হিসাবে নেওয়া হবে, যদি যুক্ত জিনিসটির মান হয়?
— জাভা

56

আপনি ব্যবহার করতে পারেন RedirectView। থেকে অনুলিপি JavaDoc :

একটি নিরঙ্কুশ, প্রাসঙ্গিক আপেক্ষিক, বা বর্তমান অনুরোধ সম্পর্কিত আপেক্ষিক URL এ পুনঃনির্দেশ করুন দেখুন

উদাহরণ:

@RequestMapping("/to-be-redirected")
public RedirectView localRedirect() {
    RedirectView redirectView = new RedirectView();
    redirectView.setUrl("http://www.yahoo.com");
    return redirectView;
}

আপনি একটি ব্যবহার করতে পারেন ResponseEntity, যেমন

@RequestMapping("/to-be-redirected")
public ResponseEntity<Object> redirectToExternalUrl() throws URISyntaxException {
    URI yahoo = new URI("http://www.yahoo.com");
    HttpHeaders httpHeaders = new HttpHeaders();
    httpHeaders.setLocation(yahoo);
    return new ResponseEntity<>(httpHeaders, HttpStatus.SEE_OTHER);
}

এবং অবশ্যই, redirect:http://www.yahoo.comঅন্যদের দ্বারা উল্লিখিত হিসাবে ফিরুন।


রিডাইরেক্টভিউই কেবল আমার জন্য কাজ করেছিল বলে মনে হয়েছিল!
— জেমস 111

আমি পুনর্নির্দেশ দর্শনের সাথে আমার স্ত্রীর আচরণ করছি, ওয়েবশপেরে আমি পাচ্ছি: [কোড] [27/04/17 13: 45: 55: 385 সিডিটি] 00001303 ওয়েবঅ্যাপ ই com.ibm.ws.webcontainer.webapp.Webapp লগ সার্ভেরিটর SRVE0293E : [ত্রুটি ডি সার্লেট] - [ডিসপ্যাচারপ্রিন্সিপাল]: java.io.IOException: প্যাটার্নটি mx.isban.sec সুরক্ষা.com অংশগুলিতে অনুমোদিত নয়।সেকআউটপুট ফিল্টার $ WrapperRsSecured.sendRedirect (SecOutputFilter.java حقونو34) javax.servletSplet.plp.plp.plp.plp.plp.plp.plp.plp.plp.plp.plp.plp.plp.plp.plp.plp.plp.png এ। প্রেরণরেডিট্রেট করুন (এইচটিটিপি সার্ভেলরেপ্প্রেস র্যাপার্স.জভা অনুগ্রহ) [কোড]
— কার্লোস ডি লুনা সেনজ

49

আরলবাসেডভিউ রিসোলভার এবং রিডাইরেক্টভিউয়ের প্রকৃত বাস্তবায়নের দিকে নজর দেওয়া আপনার পুনঃনির্দেশ লক্ষ্যটি / দিয়ে শুরু হলে পুনঃনির্দেশ সর্বদা প্রাসঙ্গিক হবে। সুতরাং একটি //yahoo.com / পাথ / টো / রিসোর্স প্রেরণ প্রোটোকলের আপেক্ষিক পুনর্নির্দেশ পেতে সহায়তা করবে না।

সুতরাং আপনি যা চেষ্টা করছেন তা অর্জন করতে আপনি যেমন কিছু করতে পারেন:

@RequestMapping(method = RequestMethod.POST)
public String processForm(HttpServletRequest request, LoginForm loginForm, 
                          BindingResult result, ModelMap model) 
{
    String redirectUrl = request.getScheme() + "://www.yahoo.com";
    return "redirect:" + redirectUrl;
}

তবে এইভাবে পুনর্নির্দেশটি জিইটি হয় বা এটি কোনও পোস্টে থেকে যায়? আমি কীভাবে পোস্ট হিসাবে পুনঃনির্দেশ করব?
— অ্যাকোল্লাটিভো

ভাল আসলে ডিফল্ট হিসাবে এটি 302 ফিরিয়ে দিচ্ছে যার অর্থ এটি প্রদত্ত ইউআরএলটির বিরুদ্ধে একটি জিইটি জারি করা উচিত। একই পদ্ধতি রক্ষায় পুনঃনির্দেশের জন্য আপনাকে আলাদা কোড (HTTP / 1.1 হিসাবে 307) সেট করা উচিত। তবে আমি নিশ্চিত যে সুরক্ষার সমস্যার কারণে কোনও ভিন্ন হোস্ট / পোর্ট-সংমিশ্রণটি ব্যবহার করে যদি এটি কোনও নিখুঁত ঠিকানার বিরুদ্ধে চলে তবে ব্রাউজারগুলি এটি ব্লক করবে will
— daniel.eichten

26

এটি করার আরেকটি উপায় হ'ল sendRedirectপদ্ধতিটি ব্যবহার করা :

@RequestMapping(
    value = "/",
    method = RequestMethod.GET)
public void redirectToTwitter(HttpServletResponse httpServletResponse) throws IOException {
    httpServletResponse.sendRedirect("https://twitter.com");
}

22

আপনি এটি ব্যবহার করে সুন্দর সংক্ষেপে এটি করতে পারেন ResponseEntity:

  @GetMapping
  ResponseEntity<Void> redirect() {
    return ResponseEntity.status(HttpStatus.FOUND)
        .location(URI.create("http://www.yahoo.com"))
        .build();
  }

1
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। সেটআপ এবং ব্যবহার করা অত্যন্ত সহজ।
— সাইবারবিট

9

আমার জন্য ভাল কাজ করে:

@RequestMapping (value = "/{id}", method = RequestMethod.GET)
public ResponseEntity<Object> redirectToExternalUrl() throws URISyntaxException {
    URI uri = new URI("http://www.google.com");
    HttpHeaders httpHeaders = new HttpHeaders();
    httpHeaders.setLocation(uri);
    return new ResponseEntity<>(httpHeaders, HttpStatus.SEE_OTHER);
}

আমি মনে করি এই পদ্ধতিটি রিডাইরেক্টভিউয়ের চেয়ে ভাল কারণ এটি পোস্টম্যানেও কাজ করছে।
— মেহেদী মোহাম্মদী

8

বাহ্যিক url এর জন্য আপনাকে " http://www.yahoo.com " ব্যবহার করতে হবে পুনঃনির্দেশ url হিসাবে।

এটি পুনর্নির্দেশে ব্যাখ্যা করা হয়েছে : স্প্রিং রেফারেন্স ডকুমেন্টেশনের উপসর্গ ।

পুনর্নির্দেশ: / myapp / কিছু / রিসোর্স

বর্তমান সার্লেট প্রসঙ্গে তুলনামূলক পুনঃনির্দেশিত করবে, যখন একটি নাম যেমন

পুনঃনির্দেশ: http://myhost.com/some/arbitrary/path

একটি নিখুঁত URL এ পুনঃনির্দেশ করা হবে


3

আপনি কি প্রাসঙ্গিক রিলেটিভ প্যারামিটারটি সরবরাহ করতে পারবেন এমন পুনর্নির্দেশের ভিউ চেষ্টা করেছিলেন?


সেই প্যারামিটারটি /ওয়েবপৃষ্ঠার প্রসঙ্গে তুলনামূলক হওয়া উচিত কিনা তা পরীক্ষা করতে যে পথগুলি শুরু হয় (বা না) এর জন্য দরকারী । পুনর্নির্দেশ অনুরোধটি এখনও একই হোস্টের জন্য থাকবে।
— সোতিরিওস ডেলিমনোলিস

-2

সংক্ষেপে "redirect://yahoo.com"আপনি ndণ দেবে yahoo.com।

যেখানে "redirect:yahoo.com"আপনাকে your-context/yahoo.comleণ দেবে যেমন প্রাক্তনlocalhost:8080/yahoo.com


উভয় সমাধানের একই কমান্ড রয়েছে: "সংক্ষেপে" পুনর্নির্দেশ: yahoo.com "বনাম" যেখানে "পুনর্নির্দেশ: ইয়াহু ডট কম" হিসাবে রয়েছে এবং কেবল সম্পর্কিত ইউআরএল পুনঃনির্দেশ কাজ করছে।
— partizanos
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.