我们的一些访问选民需要访问身份验证的WebAuthenticationDetails。
Spring Security是否提供开箱即用的支持,以便在测试用例中提供和关联WebAuthenticationDetails和身份验证?我注意到@WithMockUser或@WithUserDetails没有填写WebAuthenticationDetails例如。
在测试中实施此功能的推荐和/或最佳方法是什么?
如果没有标准方式,我是否需要提供自己的RequestPostProcessor?
我正在使用Spring Security 4.1.4。
答案 0 :(得分:0)
回答我自己的问题,现在我使用自定义的RequestPostProcessor,如:
static RequestPostProcessor webAuthenticationDetails() {
return new WebAuthenticationDetailsPostProcessor();
}
static RequestPostProcessor webAuthenticationDetails(String remoteIpAddress) {
return new WebAuthenticationDetailsPostProcessor(remoteIpAddress);
}
private static class WebAuthenticationDetailsPostProcessor implements RequestPostProcessor {
private final String remoteIpAddress;
public WebAuthenticationDetailsPostProcessor() {
this(null);
}
public WebAuthenticationDetailsPostProcessor(String remoteIpAddress) {
this.remoteIpAddress = remoteIpAddress;
}
@Override
public MockHttpServletRequest postProcessRequest(MockHttpServletRequest request) {
SecurityContext context = SecurityContextHolder.getContext();
if (context != null) {
Authentication authentication = context.getAuthentication();
if (authentication instanceof AbstractAuthenticationToken) {
if (remoteIpAddress != null) {
request.setRemoteAddr(remoteIpAddress);
}
((AbstractAuthenticationToken) authentication).setDetails(new WebAuthenticationDetails(request));
}
}
return request;
}
}
也许这样的事情应该是Spring Security Test的一部分?