使用Spring MVC 3.1中的RestTemplate进行基本身份验证状态代码301

使用Spring MVC 3.1中的RestTemplate进行基本身份验证状态代码301,rest,spring-mvc,basic-authentication,restful-authentication,resttemplate,Rest,Spring Mvc,Basic Authentication,Restful Authentication,Resttemplate,我正在使用SpringMVC3.1开发一个示例应用程序。在这个应用程序中,我使用RESTAPI,要使用RESTAPI,我使用REST模板 我的第一个页面是简单的登录表单,用户在其中输入用户名和密码。在控制器中,我获取这些用户名和密码,对它们进行编码,并发送get请求进行基本身份验证 如果状态代码为200,则对用户进行身份验证,否则不进行身份验证 但我总是得到状态码301 我的控制器代码如下: @RequestMapping(value = "/loginForm", method = Reque

我正在使用SpringMVC3.1开发一个示例应用程序。在这个应用程序中,我使用RESTAPI,要使用RESTAPI,我使用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";

    }    
@RequestMapping(value=“/loginForm”,method=RequestMethod.POST)
公共字符串登录(@modeldattribute(“loginForm”)loginForm loginForm,
BindingResult结果,ModelMap模型){
字符串userName=loginForm.getUserName();
字符串password=loginForm.getPassword();
//基本身份验证
字符串标记=用户名+“:”+密码;
BASE64Encoder enc=新的sun.misc.BASE64Encoder();
字符串encodedAuthorization=enc.encode(token.getBytes());
字符串authHeader=“Basic”+编码授权;
System.out.println(“authHeader:::”+authHeader);
//准备可接受的介质类型
List acceptableMediaTypes=new ArrayList();
acceptableMediaTypes.add(MediaType.APPLICATION\uXML);
HttpHeaders=新的HttpHeaders();
headers.setAccept(acceptableMediaTypes);
headers.setContentType(MediaType.APPLICATION\uXML);
headers.set(“授权”,authHeader);
HttpEntity=新的HttpEntity(标题);
ResponseEntity ResponseEntity=restTemplate.exchange(uri,
HttpMethod.GET、实体、字符串.class);
HttpHeaders header=responseEntity.getHeaders();
HttpStatus代码=responseEntity.getStatusCode();
System.out.println(“标题:::”+标题);
System.out.println(“代码:::”+代码);
//字段验证
validator.validate(loginForm,result);
if(result.hasErrors()){
返回“登录”;
}
//检查状态是否为200
if((Integer.parseInt(code.toString())!=200)){
model.addAttribute(“formError”、“true”);
返回“登录”;
}
model.addAttribute(loginForm);
返回“重定向:日期项”;
}    

我哪里错了?

301表示永久重定向。您可能正在请求一个过时的URL。位置响应头告诉您新URL是什么。请参见

301是重定向。你是说401吗?当我在登录表单中输入任何用户名和密码并对其进行处理时,我会在控制台上得到这些输出:authHeader:Basic YWFhYWE6YWFhYQ==Header:Header:::{Server=[nginx/0.7.67],Content Type=[text/html],Content Length=[185],Location=[,Vary=[Accept Encoding],Date=[Sat,2012年10月20日08:14 GMT],Connection=[keep alive]}Code:301所以状态代码是301。当我将其设置为applicationon/xmlYes-Jasha时,这个和头也不像其他请求那样的内容类型=[text/html],这是什么意思?我知道了。谢谢回复:):)