当前位置: 首页 > 知识库问答 >
问题:

Spring Security AngularJS登录

戚俊美
2023-03-14

我有一个Spring Boot应用程序并为其配置了Spring Security性,它使用带有简单AngularJS表单的自定义登录页面,我正在尝试通过它进行身份验证,但未成功。在我的MONTUserDetailsService loadUserByUsername(String参数)参数参数每次都为空,有人能帮我吗?我错过了什么吗?

这是我的表格:

<form role="form" action="" name="form" class="">
        <fieldset class="pure-group">
            <legend>Log In</legend>
            <div class="form-group">
                <label for="username">Username:</label> 
                <input type="text" class="form-control" id="username" name="username" ng-model="credentials.username"/>
            </div>
            <div class="form-group">
                <label for="password">Password:</label> 
                <input type="password"  class="form-control" id="password" name="password" ng-model="credentials.password"/>
            </div>
            <button ng-click="onLogin($event)" type="submit" class="btn btn-primary">Submit</button>
        </fieldset>
    </form>

这是我的js:

$scope.onLogin = function($event){
     $event.preventDefault();
     $http({
         method: 'POST',
         url:'/login',
         data: $scope.credentials
     })  
}   

这是我的安全配置:

@Override
    protected void configure(HttpSecurity http) throws Exception {
        http
        .authorizeRequests()
        .antMatchers("/newuser","/create").permitAll()
        .antMatchers("/css/**").permitAll()
        .antMatchers("/js/**").permitAll()
        .antMatchers("/**").hasRole("USER").anyRequest().authenticated()
        .and()
        .formLogin()
        .loginProcessingUrl("/login")
        .usernameParameter("username")
        .passwordParameter("password")
        .defaultSuccessUrl("/index.html")
        .loginPage("/loginpage.html")
        .and()
        .httpBasic()
        .and()
        .logout()
        .logoutUrl("/logout")
        .logoutSuccessUrl("/loginpage.html")
        .permitAll()
        .and()
        .csrf().csrfTokenRepository(csrfTokenRepository())
        .and()
        .addFilterAfter(new CsrfHeaderFilter(), CsrfFilter.class);

    }

这是我每次都会遇到的例外:

org.springframework.security.authentication.InternalAuthenticationServiceException: Cannot pass null or empty values to constructor

还想提及的是,通过我的POST请求发送用户名和密码

我试过j_username和j_password,但什么都没有。

共有2个答案

范振海
2023-03-14

似乎您将数据发布为JSON,而不是form_数据(单参数用户名和密码)。有关详细信息,请参阅此答案:

如何在AngularJS中使用$http发布URLEcoded表单数据?

龙安阳
2023-03-14

试着像这样构建帖子数据

$scope.onLogin = function($event){
    $event.preventDefault();
    var data = 'username=' + encodeURIComponent($scope.credentials.username) +
        '&password=' + encodeURIComponent($scope.credentials.password) +
        '&submit=Login';
    $http.post('/login', data, {
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded'
        }
    });
}

这样,它将是预期的内容类型,如果我没有弄错的话,它与表单的正常发布方式相匹配。抱歉没有详细说明。

 类似资料:
  • 容器在分派请求到 servlet引擎之前建立调用者身份。在整个请求处理过程中或直到应用成功的在请求上调用身份认证、登录或退出,调用者身份保持不变。对于异步请求,调用者身份建立在初始分派时,直到整个请求处理完成或直到应用成功的在请求上调用身份认证、登录或退出,调用者身份保持不变。 在处理请求时登录到一个应用,精确地对应有一个有效的非空的与请求关联的调用者身份,可以通过调用请求的 getRemoteU

  • 4.8.1 登出 现在我们来完成登出的功能。修改 routes/signout.js 如下: routes/signout.js const express = require('express') const router = express.Router() const checkLogin = require('../middlewares/check').checkLogin // G

  • 4.8.1 登出 现在我们来完成登出的功能。修改 routes/signout.js 如下: routes/signout.js var express = require('express'); var router = express.Router(); var checkLogin = require('../middlewares/check').checkLogin; // GET

  • 用户登录 调用地址 https://api.bilibili.tv/login 需要 App Key;此API调用权限需要额外申请,具体请联系网站客服。 参数 字段 必选 类型 说明 userid/email true string 帐号名或邮箱 pwd true string 明文密码 captcha true string 验证码 (请访问 https://secure.bilibili.tv

  • 作用 单点登录企业app、企业app H5等 依赖 获取单点登录前,员工的账户必须已经在滴滴,可使用员工添加接口将员工加入滴滴 注意 所有接口调用时需要严格遵守请求方式(GET/POST) 使用接口前需要仔细阅读每个接口的注意事项 接口报错时先阅读[通用错误解决方案][2]和当前接口文档下的接口错误解决方案

  • 3. 登录 打开云课堂 APP,通过扫描二维码或输入讲师登录地址的方式,选择课堂模式,进入课堂登录页面,输入昵称和密码,进入课堂房间。支持识别本地相册的二维码图片。 昵称 可自定义名称,名称将会在视频窗口及聊天中显示。 课堂密码 填写房间的讲师端登录密码。 线路切换 根据所在区域,切换线路。 横竖屏设置 根据直播场景,选择横屏或者竖屏。

  • 登陆 1. 在可连接互联网的环境轻触[PlayStation®Network]>[登陆]。 2. 输入在线ID与密码,并轻触[OK]。 登陆1次后即会保存在线ID与密码,以后将根据需要自动登陆。 无法连接网络时,可能会自动登出。 登出 若要手动登出,请轻触[PlayStation®Network]>[登出]。 若已手动登出,下次需要登陆时会显示登陆画面。请确认画面显示的内容,进行登陆操作。

  • 使用 sentry 在控制器里面,我们使用 sentry,需要在控制器顶部 use 以下 use Sentry 登陆 之 基于凭证登陆用户 首先,登陆非常简单,就是收集表单数据,验证表单数据,我们这里主要讲解怎么验证表单数据 看下面代码 $cred = [ 'email'=>Input::get('email'), 'pa