2012-12-16 40 views
0

時沒有和解組豆我從org.springframework.security.core.userdetails.User並使用這個bean使用OpenID延伸的豆。豆看起來像:Spring可以使用Spring安全

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(值= 「/addEmp.do」, 方法= RequestMethod.POST) 公共字符串@ResponseBody addEmployee (@RequestBody僱員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 
+0

你肯定有什麼更多的從JAXB的日誌?您是否嘗試過使用此輸入手動調用JAXB(在某個遊樂場項目中)? –

回答

1

錯誤消息:

無法創建com.employee的實例

可能意味着輸入不提供有效的員工資產。在構造函數中

public Employee() { 
    super("", "unused", null); 
} 

默認用戶名設置爲「」,但春天安全不接受空白的用戶名。

+0

看起來像這個問題的可能原因,因爲它一直在工作,直到我介紹userdetails的東西。將嘗試傳遞一些虛擬值的用戶名,看看它是否修復。我沒有使用用戶名,所以我把它留作空白。可能還需要爲每個用戶生成唯一的用戶名。 – Sandeep

+0

您可以使用empId.t​​oString()作爲用戶名,如果它是獨特的,不可爲空。您可能還需要提供一些其他屬性,如密碼,啓用(T/F),passwordExpired,accountExpired,accountLocked等,如果他們不設置爲空。 – coderLMN

+0

empId.t​​oString()在構造函數中不起作用,因爲empId是成員變量。你能不能讓我知道如何設置密碼,啓用等字段爲空?我甚至試過「super(String.valueOf((new Random())。nextInt()),」unused「,null);」但它不起作用。 – Sandeep