我在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