Spring MVC 3.1 を使用してサンプル アプリケーションを開発しています。このアプリケーションでは REST API を使用しており、REST API を使用するために Rest テンプレートを使用しています。
私の最初のページは、ユーザーがユーザー名とパスワードを入力する単純なログイン フォームです。コントローラーでは、これらのユーザー名とパスワードを取得してエンコードし、基本認証の get 要求を送信します。
ステータス コードが 200 の場合、ユーザーは認証されています。それ以外の場合は認証されていません。
しかし、私は常にステータスコード301を取得しています.
私のコントローラーコードは次のとおりです。
@RequestMapping(value = "/loginForm", method = RequestMethod.POST)
public String login(@ModelAttribute("loginForm") LoginForm loginForm,
BindingResult result, ModelMap model) {
String userName = loginForm.getUserName();
String password = loginForm.getPassword();
// Basic Authentication
String token = userName + ":" +password;
BASE64Encoder enc = new sun.misc.BASE64Encoder();
String encodedAuthorization = enc.encode(token.getBytes());
String authHeader = "Basic " + encodedAuthorization;
System.out.println("authHeader :::::: " + authHeader);
// Prepare acceptable media type
List<MediaType> acceptableMediaTypes = new ArrayList<MediaType>();
acceptableMediaTypes.add(MediaType.APPLICATION_XML);
HttpHeaders headers = new HttpHeaders();
headers.setAccept(acceptableMediaTypes);
headers.setContentType(MediaType.APPLICATION_XML);
headers.set("Authorization", authHeader);
HttpEntity<String> entity = new HttpEntity<String>(headers);
ResponseEntity<String> responseEntity = restTemplate.exchange(uri,
HttpMethod.GET, entity, String.class);
HttpHeaders header = responseEntity.getHeaders();
HttpStatus code = responseEntity.getStatusCode();
System.out.println("Header :::::: " + header);
System.out.println("Code :::::: " + code);
// Validation on fields
validator.validate(loginForm, result);
if (result.hasErrors()) {
return "login";
}
// Checkign status is 200 or not
if ((Integer.parseInt(code.toString())!= 200)) {
model.addAttribute("formError", "true");
return "login";
}
model.addAttribute(loginForm);
return "redirect:dateEntry";
}
どこが間違っていますか?