@Contextインジェクションはクラスでは動作しますが、オブジェクトでは動作できません。@ContextインジェクションはJersey ContainerRequestFilter(Dropwizard)で動作しません
ContainerRequestFilterのhttpServletRequestはNULLポインタを生成します。
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(); .... } }
DynamicFeature
@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); } } }
私は、IPに基づいて要求を認証するためにContainerRequestFilterでリモートIPを取得しようとしています。
これを修正するにはどうすればよいですか?
@ peeskillet..Thanks .. :)両方のフィールドを注入し、クラスとしてフィルターを登録することになります。 – Abhishek