0

我正在使用 Spring MVC,我需要对服务器进行异步调用并检查用户的凭据。如果匹配,那么我将重定向到另一个页面。

MyController.java

@RequestMapping("performingLogin.htm")
public ModelAndView performingLogin(@RequestParam String username, @RequestParam String password) 
{   
    //boolean value which decides whether its a valid user
    myService.performingLogin(username, password);

    //Currently returning the new model to be opened irrespective of valid user
    ModelAndView model = new ModelAndView("newpage");
    return model;
}

主视图.jsp

<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
<script type="text/javascript">
function doAjaxPost() {

   $.ajax({  
      url : "dologin.htm",  
      data : {
         username: $('#username').val(),
         password: $('#password').val()
      },   
      success : function(responseTxt,statusTxt,xhr) {  
        /* Opening new page */
        window.location.href="newpage.htm";
      }  
   }); 
}

我需要知道如何在 JSP 端验证用户,以便发出凭据不正确的警报。

4

3 回答 3

2

检查@ResponseBody 注释

public @ResponseBody String performingLogin(@RequestParam String username, @RequestParam String password) 
{   
}
于 2012-12-27T09:49:31.313 回答
1

在您的代码中,您完全忽略了返回的视图并在成功时执行 js 重定向。只要您这样做,返回值ModelAndView@ResponseBody注释值之间就没有真正的区别。

您可能想要返回401 Unauthorizedhttp 错误,然后在您的 javascript 中检查它。

有多种方法可以做到这一点。

一种是创建一个异常并用spring注解对其进行注解,然后抛出它。

类似的东西:

 @ResponseStatus(value = HttpStatus.UNAUTHORIZED)
 public class AuthenticationException extends RuntimeException {
     private static final long serialVersionUID = 23949237498237948234l;
 }

将您的请求映射更改为:

@RequestMapping("performingLogin.htm")
public ModelAndView performingLogin(@RequestParam String username, @RequestParam String password) 
{   
    //boolean value which decides whether its a valid user
    myService.performingLogin(username, password);

    if (authenticationWentWrong) {
        throw new AuthenticationException();

    }

    //Currently returning the new model to be opened irrespective of valid user
    ModelAndView model = new ModelAndView("newpage");
    return model;
}  

然后你的js代码:

<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
<script type="text/javascript">
function doAjaxPost() {

   $.ajax({
      url : "dologin.htm",
      data : {
         username: $('#username').val(),
         password: $('#password').val()
      },
      success : function(responseTxt,statusTxt,xhr) {
        /* Opening new page */
        window.location.href="newpage.htm";
      },
      statusCode : {
            401: function(jqXHR, textStatus, errorThrown) {
                //handle the authentication error here
            }
      }

   });
}
于 2012-12-27T10:36:13.497 回答
0

此外,您可能想尝试HTTPResponseEntity,我认为它经常被忽视,但可以让您更好地控制 - 可以用于spring 3.2 的新测试包。

于 2012-12-27T10:40:00.943 回答