使用具有 Spring 安全性的 angularJS 并发送 JSON 请求时出现问题
Issue when using angularJS with Spring security and sending JSON request
我正在使用 spring 安全性进行身份验证和授权。为了发送请求,我使用 Angular JS http.post 请求。示例 'home.jsp' 代码为:
<form role="form">
<div class="form-group">
<label for="username">Username:</label> <input type="text"
class="form-control" id="username" name="username" ng-model="userinfo.username"/>
</div>
<div class="form-group">
<label for="password">Password:</label> <input type="password"
class="form-control" id="password" name="password" ng-model="userinfo.password"/>
</div>
<button type="submit" class="btn btn-primary" ng-click='login()'>Submit</button>
我的用户信息 class 与模型绑定:
UserInfo.java
private String username;
private String password;
// Generated getters & setters
样本'home.js'是:
我在下面做一些事情,即我正在转换 JSON 字符串中的 userInfo。
$scope.login = function() {
$http.post('login', angular.toJson(userInfo)
.success(function(data) {
// Some response handling
})};
登录到达服务器并执行所有内置 spring 安全过滤器但是当我调试 'UserandPasswordAuthenticationFilter' 它显示 request.getParameter('username') 并且密码为 NULL .我正在发送 UserInfo class 类型的 JSON 字符串。
任何人都可以指导我添加一个新过滤器,其中 'parse' JSON 字符串并在执行 'UserandPasswordAuthenticationFilter' 之前转换为 UserInfo 对象,并在 servlet 请求参数和中设置用户名和密码类似地,另一个过滤器将对象转换为 JSON 同时发回响应?
请大家帮忙提出最佳方案
谢谢。
您面临两种选择。要么只是 post Spring 对您的期望(即简单的 j_username 和 j_password 参数),要么配置一组不同的过滤器和身份验证提供程序,它们将构造和期望不同的令牌(不是现在由 UsernamePasswordAuthenticationFilter 创建的 UsernamePasswordToken)。您的身份验证提供者应该期待新的令牌类型并在其 supports(Class<?> clazz)
方法中检查它。
我正在使用 spring 安全性进行身份验证和授权。为了发送请求,我使用 Angular JS http.post 请求。示例 'home.jsp' 代码为:
<form role="form">
<div class="form-group">
<label for="username">Username:</label> <input type="text"
class="form-control" id="username" name="username" ng-model="userinfo.username"/>
</div>
<div class="form-group">
<label for="password">Password:</label> <input type="password"
class="form-control" id="password" name="password" ng-model="userinfo.password"/>
</div>
<button type="submit" class="btn btn-primary" ng-click='login()'>Submit</button>
我的用户信息 class 与模型绑定:
UserInfo.java
private String username;
private String password;
// Generated getters & setters
样本'home.js'是: 我在下面做一些事情,即我正在转换 JSON 字符串中的 userInfo。
$scope.login = function() {
$http.post('login', angular.toJson(userInfo)
.success(function(data) {
// Some response handling
})};
登录到达服务器并执行所有内置 spring 安全过滤器但是当我调试 'UserandPasswordAuthenticationFilter' 它显示 request.getParameter('username') 并且密码为 NULL .我正在发送 UserInfo class 类型的 JSON 字符串。 任何人都可以指导我添加一个新过滤器,其中 'parse' JSON 字符串并在执行 'UserandPasswordAuthenticationFilter' 之前转换为 UserInfo 对象,并在 servlet 请求参数和中设置用户名和密码类似地,另一个过滤器将对象转换为 JSON 同时发回响应?
请大家帮忙提出最佳方案
谢谢。
您面临两种选择。要么只是 post Spring 对您的期望(即简单的 j_username 和 j_password 参数),要么配置一组不同的过滤器和身份验证提供程序,它们将构造和期望不同的令牌(不是现在由 UsernamePasswordAuthenticationFilter 创建的 UsernamePasswordToken)。您的身份验证提供者应该期待新的令牌类型并在其 supports(Class<?> clazz)
方法中检查它。