Spring не может отключить bean при использовании безопасности Spring
У меня есть бин, который выходит из org.springframework.security.core.userdetails.User и использую этот бин с openID. Боб выглядит так:
package com.employee;
import java.util.Collection;
import javax.xml.bind.annotation.XmlRootElement;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.User;
@XmlRootElement(name="Employee")
public class Employee extends User{
private int empId;
private String deptName;
public Employee() {
super("", "unused", null);
}
public Employee(String username, Collection<GrantedAuthority> authorities) {
super(username, "unused", authorities);
}
public int getEmpId() {
return empId;
}
public void setEmpId(int empId) {
this.empId = empId;
}
public String getDeptName() {
return deptName;
}
public void setDeptName(String deptName) {
this.deptName = deptName;
}
}
Контроллер принимает экземпляр Employee как:
@RequestMapping (value = "/addEmp.do", method = RequestMethod.POST) public @ResponseBody String addEmployee (@RequestBody Employee emp) {...}
Я отправил запрос POST со следующим телом:
<?xml version="1.0" encoding="UTF-8"?>
<Employee>
<empId>10</empId>
<deptName>abc</deptName>
</Employee>
Но получая следующее исключение JAXB при вызове операции addEmp:
2012-12-16 15:25:55,364{HH:mm:ss} DEBUG [http-bio-8080-exec-1] (AbstractHandlerExceptionResolver.java:132) -
Resolving exception from handler [public java.lang.String com.main.EmpController.addEmployee(com .employee.Employee)]:
org.springframework.http.converter.HttpMessageNotReadableException: Could not unmarshal to
[class com.employee.Employee]: Unable to create an instance of com.employee.Employee; nested exception is
javax.xml.bind.UnmarshalException: Unable to create an instance of com.employee.Employee
1 ответ
Решение
Сообщение об ошибке:
Невозможно создать экземпляр com.employee
может означать, что входные данные не предоставляют действительные свойства сотрудника. В конструкторе
public Employee() {
super("", "unused", null);
}
имя пользователя по умолчанию установлено на '', но Spring Security не принимает пустое имя пользователя.