@Context注入可用于类,但不能使其与对象一起使用.
ContainerRequestFilter中的httpServletRequest产生空指针.
Dropwizard版本:-1.1.0
ContainerRequestFilter
public class ApplicationIPAuthFilter implements ContainerRequestFilter {
private static final Logger LOGGER = LoggerFactory.getLogger(ApplicationIPAuthFilter.class);
private HerculesRestAccessor restAccessor;
private String applicationName;
@Context
private HttpServletRequest httpServletRequest;
public ApplicationIPAuthFilter(){
}
public ApplicationIPAuthFilter(HerculesRestAccessor accessor, String applicationName) {
restAccessor = accessor;
this.applicationName = applicationName;
}
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
// need remote Ip
String remoteIp = this.httpServletRequest.getRemoteAddr();
....
}
}
动态功能
@Provider
public class ApplicationIPAuthFeature implements DynamicFeature {
private final HerculesRestAccessor accessor;
private final String applicationName;
public ApplicationIPAuthFeature(HerculesRestAccessor accessor, String applicationName) {
this.accessor = accessor;
this.applicationName = applicationName;
}
@Override
public void configure(ResourceInfo resourceInfo, FeatureContext context) {
if (resourceInfo.getResourceMethod().getAnnotation(ApplicationIPAuthRequired.class) != null) {
// not working
context.register(new ApplicationIPAuthFilter(accessor, applicationName));
//@Context injection works in ContainerRequestFilter for classes
//context.register(ApplicationIPAuthFilter.class);
}
}
}
我正在尝试在ContainerRequestFilter中获取远程IP,以验证基于IP的请求.
我该如何解决..需要帮助?