我有一个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,但什么都没有。
似乎您将数据发布为JSON,而不是form_数据(单参数用户名和密码)。有关详细信息,请参阅此答案:
如何在AngularJS中使用$http发布URLEcoded表单数据?
试着像这样构建帖子数据:
$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