शायद यह पुराना सवाल है, लेकिन इस विषय में मेरे हालिया शोध के दौरान, मैंने पाया कि समस्या आम है और अभी भी मौजूद है (विशेष रूप से बैक-एंड सुरक्षा के साथ आधुनिक एंगुलरजेएस फ्रंट एंड ऐप्स के मामले में)। मैं आपके साथ अपना समाधान साझा करना चाहता हूं।
प्रवेश पृष्ठ पर, जैसे, /login.html, निम्नलिखित कोड </body>
टैग से पहले डाल:
<script type="text/javascript">
var hash = window.location.hash;
document.cookie="hashPart=" + window.btoa(hash);
</script>
नोट (1): btoa() फ़ंक्शन IE में काम करता है> = 10 (http://www.w3schools.com/jsref/met_win_btoa.asp), पुराने ब्राउज़र के लिए jQuery समकक्ष का उपयोग करें।
नोट (2): यूआरएल के # भाग का एन्क्रिप्शन आवश्यक है क्योंकि इसमें विशेष वर्ण हो सकते हैं, जिन्हें कुकी वैल्यू स्ट्रिंग में संग्रहीत करने की अनुमति नहीं है।
सर्वर पक्ष से आपको AuthenticationSuccessHandler
इंटरफ़ेस को लागू करने वाले वर्ग की विधि को संशोधित करना होगा।
मेरे मामले में, मैं बस SavedRequestAwareAuthenticationSuccessHandler
कक्षा का विस्तार करता हूं और onAuthenticationSuccess
विधि को मूल कोड का उपयोग करके ओवरराइड करता हूं। फिर मैं अनुरोध से हैशपार्ट कुकी मान प्राप्त करता हूं, इसे डीकोड करता हूं और हल किए गए रीडायरेक्ट URL में जोड़ता हूं। मेरे कोड टुकड़ा नीचे:
@Override
public void onAuthenticationSuccess(HttpServletRequest request,
HttpServletResponse response, Authentication authentication)
throws ServletException, IOException {
// ... copy/paste original implementation here, until ...
// Use the DefaultSavedRequest URL
String targetUrl = savedRequest.getRedirectUrl();
for (Cookie cookie : req.getCookies()) {
if (cookie.getName().equals("hashPart")) {
targetUrl += new String(Base64Utils.decodeFromString(cookie.getValue()));
cookie.setMaxAge(0); // clear cookie as no longer needed
response.addCookie(cookie);
break;
}
}
getRedirectStrategy().sendRedirect(request, response, targetUrl);
}
अंत में, बस अपनी सफलता हैंडलर वर्ग अपने स्प्रिंग सुरक्षा विन्यास के लिए, में वर्णित के रूप इंजेक्षन: https://stackoverflow.com/a/21100458/3076403
मैं आगे अपनी टिप्पणी या इस समस्या का अन्य समाधान की तलाश कर रहा हूँ।
क्या आप उदाहरण पथ –
प्रदान कर सकते हैं मैंने इसे प्रश्न में किया:/path/to/page/और #/path/to/पृष्ठ – nKognito
[आप सर्वर पक्ष पर हैश का उपयोग नहीं कर सकते] [http: // stackoverflow। com/प्रश्न/317,760/कैसे करने वाली मिलता-यूआरएल-हैश-से-सर्वर साइड)। – Xaerxess