ऐसा लगता है कि डार्ट हमेशा ब्राउज़र में इन पुन: निर्देशों का अनुसरण करता है और मैं कुकी या पहले अनुरोध के शीर्षक में टोकन प्राप्त करने के लिए कोई मौका है।
तो वैकल्पिक समाधान के रूप में मैं इस आगे क्या करने की कोशिश कर रहा हूँ:
: मैं एक संरक्षित संसाधन के रूप में कुछ इस तरह की है
@Configuration
@EnableWebMvcSecurity
@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true)
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/", "/logout").permitAll()
.anyRequest().authenticated()
.and()
.httpBasic()
.and()
.sessionManagement().sessionFixation().changeSessionId()
.and()
.csrf().disable();
}
...
}
एक नियंत्रक में: वसंत सुरक्षा में
सक्रिय मूल प्रमाणीकरण
@RequestMapping(value = "login", method = RequestMethod.POST)
public String login() {
return RequestContextHolder.currentRequestAttributes().getSessionId();
}
इस तरह आप नियमित रूप से परिणाम के रूप में अपने सत्र आईडी प्राप्त कर सकते हैं। इसलिए मैं प्रतिक्रिया बॉडी से आईडी प्राप्त कर सकता हूं और एक बार सही मूल लेख प्रमाण-पत्र प्रदान करने के बाद इसका उपयोग कर सकता हूं।
यह केवल यह बुरे लोगों साख या सत्र सूंघना लिए अधिक कठिन बना भरोसा enviromnents में या https के माध्यम से किया जाना चाहिए।
void login() {
Map<String, String> headers = {};
authorize(headers);
HttpRequest.request(LOGIN_URL, method: "POST", requestHeaders: headers)
.then((request) => processLogin(request))
.catchError((e) => processLoginError(e));
}
void processLogin(HttpRequest request) {
sessionController.sessionId=request.responseText;
mainApp.showHome();
}
void processLoginError(var e) {
print("total failure to login because of $e");
}
String authorization() {
String auth = window.btoa("$username:$password");
return "Basic $auth";
}
void authorize(Map<String, String> headers) {
headers.putIfAbsent("Authorization",() => authorization());
}
HeaderHttpSessionStrategy
अनुरोध मैं यह कर सकता भेजने के लिए::
तो मूल रूप से इस मैं क्या लॉग इन करने में क्या है
void updateUserData(){
_logger.info("Updating user data");
Map<String, String> headers = {"Accept": "application/json", 'x-auth-token':sessionId};
HttpRequest.request(USER_URL, method: "GET", requestHeaders: headers)
.then((request) => processUserData(request))
.catchError(ErrorHandler.handleHttpErrorGeneric);
}
तुम भी, कुकीज़ के साथ काम करने के लिए यह हो सकता है लेकिन मुझे HttpRequest.request()
पसंद है इसलिए हेडर फ़ील्ड के साथ जाना आसान था।
हुई एक चर्चा हाल ही में जो संबंधित हो सकती है https://groups.google.com/a/dartlang.org/forum/?nomobile= सच #! विषय/क्लाउड/OPFK_0MkB3c –
मैंने इसे देखा, लेकिन ऐसा लगता है कि डार्ट का उपयोग होता है: io जो ब्राउज़र में उपलब्ध नहीं है :-( –
ऐसा लगता है कि यह मेरा लॉगिन फ़िल्टर लिखना आसान है जो अभी रीडायरेक्ट नहीं करता है : - / –