के माध्यम से प्राप्त jsessionid को कैसे भेजा जाए मैं क्लाइंट-साइट पर स्प्रिंग 4 और सर्वर-साइट पर स्प्रिंग 4 के साथ एक मैसेंजर लिख रहा हूं। मैंने वसंत-सुरक्षा 3.2 के साथ सर्वर को सुरक्षित किया। अब मेरी समस्या: मेरे पास क्लाइंट चुड़ैल पर एक लॉगिन पेज है जो लॉगिन जानकारी को वसंत-सुरक्षा में भेजता है और JSESSIONID कुकी प्राप्त करता है। यह ठीक काम करता है, लेकिन जब मैं अपने अनुरोध के साथ jsessionid भेजने के लिए प्रयास करते समय मुझेस्प्रिंग 4 resttemplate
org.springframework.web.client.RestClientException: Could not extract response: no suitable HttpMessageConverter found for response type [class org.messenger.rest.JSONConversationResult] and content type [text/html;charset=UTF-8]
सर्वर Inizializer
public class SpringMvcInitializer extends
AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[] {ApplicationConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[] {WebConfig.class};
}
@Override
protected String[] getServletMappings() {
return new String[] {"/"};
}
}
सर्वर SecurityInizializer
public class SpringSecurityInitializer extends
AbstractSecurityWebApplicationInitializer {
}
सर्वर SecurityConfig
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private DriverManagerDataSource dataSource;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
String authQuery = "select userid, authority from user where userid = ?";
String userQuery = "select userid, pw, enabled from user where userid = ?";
auth.jdbcAuthentication().dataSource(dataSource)
.passwordEncoder(passwordEncoder())
.usersByUsernameQuery(userQuery)
.authoritiesByUsernameQuery(authQuery);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/register").permitAll()
.antMatchers("/getconvs", "/getcontacts").hasRole("USER")
.and()
.formLogin()
.and()
.csrf().disable();
}
@Bean
public AuthenticationEntryPoint authenticationEntryPoint() {
return new de.daschner.messenger.security.AuthenticationEntryPoint();
}
@Bean
public SuccessHandler successHandler() {
return new SuccessHandler();
}
@Bean
public SimpleUrlAuthenticationFailureHandler failureHandler() {
return new SimpleUrlAuthenticationFailureHandler();
}
@Bean
public AuthenticationManager authenticationManager() throws Exception {
return super.authenticationManager();
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder(11);
}
}
बन
सर्वर सुरक्षित "पृष्ठ"
@RequestMapping(value="/getconvs", method={RequestMethod.GET},
produces={MediaType.APPLICATION_JSON_VALUE})
public @ResponseBody JSONConversationResult getConvsList(HttpServletRequest request, @RequestParam(value="uid") String uid){
JSONConversationResult ret = new JSONConversationResult();
Map<String, Map<Date, String>> convs = convService.getConvsList(uid);
if (convs != null) {
ret.setConversations(convs);
ret.setMessage("OK");
ret.setError(0);
} else {
ret.setError(1);
ret.setMessage("Verbindungsfehler");
}
return ret;
}
ग्राहक भेजने लॉग इन के लिए requestmapping और कुकी
Map<String, String> loginform = new HashMap<String, String>();
loginform.put("username", user);
loginform.put("password", pw);
HttpEntity<Map<String, String>> login = new HttpEntity<Map<String, String>>(loginform);
ResponseEntity<HttpServletResponse> response = restTemplate.exchange(
"http://localhost:8080/messenger-webapp/login",
HttpMethod.POST,
login,
HttpServletResponse.class);
HttpHeaders headers = response.getHeaders();
Set<String> keys = headers.keySet();
String cookie = "";
for (String header : keys) {
if (header.equals("Set-Cookie")) {
cookie = headers.get(header).get(0);
}
}
String jsessionid = cookie.split(";")[0];
conf.setJsessionid(jsessionid.split("=", 2)[1]);
return ret;
क्लाइंट अनुरोध
ResponseEntity<JSONConversationResult> response = restTemplate.exchange(
"http://localhost:8080/messenger-webapp/getconvs?uid=" + uid,
HttpMethod.GET,
getAuthHeader(),
JSONConversationResult.class);
JSONConversationResult ret = response.getBody();
return ret;
private HttpEntity<String> getAuthHeader() {
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.add("Cookie", "JSESSIONID=" + config.getJsessionid());
return new HttpEntity<String>(requestHeaders);
}
मुझे आशा है कि आप मेरी मदद कर सकते हैं के साथ jsessionid भेज मिलता है।
संपादित करें:
ठीक है मैं पता लगा है कि समस्या नहीं था कि jsessionid सही ढंग से नहीं भेजा गया था। लेकिन मेरा लॉगिन गलत था और उपयोगकर्ता को डेटाबेस से प्राप्त करने के लिए मेरी क्वेरी थी।
सही लॉगिन पोस्ट
ClientHttpResponse response = restTemplate.execute(
"http://localhost:8080/messenger-webapp/login",
HttpMethod.POST,
new RequestCallback() {
@Override
public void doWithRequest(ClientHttpRequest request) throws IOException {
request.getBody().write(("username=" + user + "&password=" + pw).getBytes());
}
},
new ResponseExtractor<ClientHttpResponse>() {
@Override
public ClientHttpResponse extractData(ClientHttpResponse response)
throws IOException {
return response;
}
});
सही क्वेरी
String authQuery = "select u.userid, r.role_name from user u, role r, user_role a where u.dbid = a.user_id and r.dbid = a.role_id and u.userid = ?";
मुझे आशा है कि यह अन्य लोगों को मदद मिलेगी। अगर किसी के पास कोई विकल्प है तो कृपया मुझे बताएं।
आप आगे बढ़ सकते हैं और अपना उत्तर वास्तविक उत्तर के रूप में पोस्ट कर सकते हैं- – chrismarx