我需要发送包含特殊字符的密码。例如:包含abc +的密码最终为服务器端的abc(空格),这是错误的,打破了大象。服务器无罪,因为我检查了网络并且角度确实发送到服务器' abc'用空格代替' abc +'。所以问题出在客户端代码上。
login: function (param) {
var data,
config = {
headers: {
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
},
ignoreAuthModule: 'ignoreAuthModule'
};
data = 'j_username=' + param.username + '&j_password=' + param.password + '&_spring_security_remember_me=' + param.rememberMe + '&submit=Login';
if (!angular.isUndefined(param.service)) {
data += '&service=' + param.service;
}
$http.post('app/authentication', data, config).success(
function (data, status, headers, config) {
$rootScope.registrationSuccess = false;
$rootScope.authenticationError = false;
$rootScope.userLocked = false;
if (param.success) {
param.success(data, status, headers, config);
}
}
) ...
当我调试代码时,j_password实际上有' abc +'。我想有些配置是错误的。帮助可怜的java开发人员。
答案 0 :(得分:2)
您应该使用encodeURIComponent对参数进行编码。例如,
data = 'j_username=' + encodeURIComponent(param.username) + '&j_password=' + encodeURIComponentparam.password) + '&_spring_security_remember_me=' + encodeURIComponent(param.rememberMe) + '&submit=Login';