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 не принимает пустое имя пользователя.

Другие вопросы по тегам