【问题标题】:How to send username and password in Ajax call?如何在 Ajax 调用中发送用户名和密码?
【发布时间】:2017-04-19 11:18:48
【问题描述】:

在这里,我想将用户名和密码发送到我的 spring mvc 控制器。我正在使用 ajax 调用 mvc 方法。它没有到达控制器。

角度控制器:-

$scope.formSubmit=function(){
        alert("submitted")

        return $http({
            url :'loginSubmit' ,
            method : "POST",
            data: { username: $scope.username, password: $scope.password }
            //data: data
        }).success(function(data, status, headers){

        }).error(function(data, status, headers) {
            console.log("login error"+status);     
     }); 

    }

mvc 控制器

@RequestMapping(value="/loginSubmit",method=RequestMethod.POST)
    public  @ResponseBody User loadUserByUsername(@RequestParam("username") String username,@RequestParam("password") String password, HttpSession session){
        System.out.println("controller");
        System.out.println("name is "+username);

        return null;
    }

【问题讨论】:

  • 你能在控制台中检查网络,看看你的请求在哪里吗?
  • 然后请在服务器端记录请求的url。始终在正文中发送凭据。 Read comments

标签: java angularjs spring-mvc


【解决方案1】:

如果您使用请求参数,则必须附加到 URL

$scope.formSubmit=function(){
        alert("submitted")

        return $http({
            url :'loginSubmit?username='+$scope.username+'&password='+$scope.password ,
            method : "POST",
        }).success(function(data, status, headers){

        }).error(function(data, status, headers) {
            console.log("login error"+status);     
     }); 

    }

注意:不要使用警报。使用 console.log

最好的方法是发送正文而不是请求 URL 中的凭据

** 保留您发送数据的旧JS代码作为正文并将JAVA代码更改为**

@RequestMapping(value="/loginSubmit",method=RequestMethod.POST)
public  @ResponseBody User loadUserByUsername(@RequestBody Map<String,Object> credentials, HttpSession session){
    String username = credentials.get("username");
    String password = credentials.get("password");
    System.out.println("controller");
    System.out.println("name is "+username);
    return null;
}

【讨论】:

  • 然后请在服务器端记录请求的url。始终在正文中发送凭据。 Some discussion
  • 使用 Spring Security 时不需要。然后,如果您将 body 作为表单发送,Spring 将自行解决。在附加的帖子中进行了解释
  • @xenteros 我可以知道在 Map 中,什么是字符串和对象
  • String 是一个键。例如“用户名”和“密码”。 Object 将是一个值。例如"mypassword" 或 123 作为 id。
【解决方案2】:

试试这个

$scope.formSubmit=function(){
        alert("submitted")
        var uname = $scope.username,pswd=$scope.password;
        return $http({
            url :'loginSubmit',
            method : "POST",
            params : {username:uname,password:pswd}
        }).success(function(data, status, headers){

        }).error(function(data, status, headers) {
            console.log("login error"+status);     
     }); 

    }

【讨论】:

    【解决方案3】:
    return $http({
                url :'/loginSubmit',
                method : "POST",
                data: { username: $scope.username, password: $scope.password }
                //data: data
            }).success(function(data, status, headers){
    
            }).error(function(data, status, headers) {
                console.log("login error"+status);     
         }); 
    
        }
    
    @RequestMapping(value="/loginSubmit",method=RequestMethod.POST)
        public  @ResponseBody User loadUserByUsername(@RequestParam("username") String username,@RequestParam("password") String password, HttpSession session){
            System.out.println("controller");
            System.out.println("name is "+username);
    
            return null;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-06
      • 1970-01-01
      • 2014-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-05
      相关资源
      最近更新 更多