我在JAX-RS得到的用戶名與SecurityContextHolder
資源和工作原理:獲取用戶名和Apache CXF 2.4 JAX-RS和Spring Security的3.2
@Path("/myresource")
public class MyResoure {
@Get
public String getUserName() {
return SecurityContextHolder.getContext().getAuthentication().getName();
}
}
但我想SecurityContext中注入一類字段(編寫JUnit測試)。我嘗試了一些記錄的方式:
With javax.ws.rs.core.SecurityContext
我得到一個NullPointerException
,因爲securityContext
總是null
。
@Path("/myresource")
public class MyResoure {
@Context
private javax.ws.rs.core.SecurityContext securityContext;
@Get
public String getUserName() {
return securityContext.getUserPrincipal().getName();
}
}
隨着org.apache.cxf.security.SecurityContext
(見Apache CXF documentation)我得到一個NullPointerException
,因爲securityContext.getUserPrincipal()
總是null
。
@Path("/myresource")
public class MyResoure {
@Context
private org.apache.cxf.security.SecurityContext securityContext;
@Get
public String getUserName() {
return securityContext.getUserPrincipal().getName();
}
}
隨着org.apache.cxf.jaxrs.ext.MessageContext
(見Apache CXF documentation)我得到一個NullPointerException
,因爲messageContext.getSecurityContext().getUserPrincipal()
總是null
。
@Path("/myresource")
public class MyResoure {
@Context
private org.apache.cxf.jaxrs.ext.MessageContext messageContext;
@Get
public String getUserName() {
return messageContext.getSecurityContext().getUserPrincipal().getName();
}
}
隨着javax.servlet.http.HttpServletRequest
我得到了NullPointerException
,因爲httpServletRequest.getUserPrincipal()
總是null
。
@Path("/myresource")
public class MyResoure {
@Context
private javax.servlet.http.HttpServletRequest httpServletRequest;
@Get
public String getUserName() {
return httpServletRequest.getUserPrincipal().getName();
}
您是否嘗試過調查SecurityContext中的用戶名設置?您可以創建一個Authentication對象,創建SecurityContext,然後在Junit安裝程序中通過SecurityContextHolder在線程語言環境中設置SecurityContext。 – jitsonfire