У меня есть приложение Springboot, работающее со строкой конфигурации в Джерси property(ServletProperties.FILTER_STATIC_CONTENT_REGEX, "/mywebpage/.*")
, чтобы включить рендеринг статического содержимого html / js / css / image ... для этого конкретного префикса пути. Все в порядке, и mywebpage отлично загружается на /mywebpage/index.html
.
Теперь, после запуска mywebpage
в течение нескольких месяцев, мы хотим перенаправить процент пользователей (включенных для бета-тестирования) на новую веб-страницу (скажем, https://stackoverflow.com/). Так что я пытаюсь написать Filter
для пути /mywebpage/index.html
для перенаправления пользователя на новую страницу, если он включен для бета-версии. Теперь часть, которая поставила меня в тупик, заключается в том, что по какой-то причине никакие фильтры не вызываются для каких-либо вызовов /mywebpage/.*
( вызовы, сделанные браузером для получения содержимого html / js / css / ...) (проверяется с помощью точек останова и фиктивных журналов). Я предполагаю, что подозрительным будет свойство ServletProperties.FILTER_STATIC_CONTENT_REGEX
.
У меня уже есть бит, чтобы вычислить, включена ли у пользователя бета-версия, и мне просто нужно вставить его в Filter
.
Вот что я пытался:
@Provider
public class RedirectionFilter implements ContainerRequestFilter {
@Autowired
private BetaAudienceService betaAudienceService;
@Context
private UriInfo info;
private static final Logger log = LogManager.getLogger(getClass());
@Override
public void filter(ContainerRequestContext request) throws IOException {
log.info("Test Log :: Path=" + request.getUriInfo().getAbsolutePath().getPath());
if (request.getUriInfo().getAbsolutePath().getPath().equals("/mywebpage/index.html") && isBetaEnabled(request)) {
try {
request.abortWith(Response.temporaryRedirect(new URI("https://stackoverflow.com/")).build());
} catch (URISyntaxException e) {
throw new IOException("Failed to build or respond with Redirection URI", e);
}
}
}
private boolean isBetaEnabled(ContainerRequestContext request) { ... }
}
и
public class JerseyConfig extends ResourceConfig {
@Autowired
private ApplicationContext appCtx;
@PostConstruct
public void setup() {
register(A.class);
register(B.class);
...
}
public JerseyConfig() {
property(ServletProperties.FILTER_STATIC_CONTENT_REGEX, Constants.STATIC_CONTENT_PATH);
}
}
Любые предложения о том, как я могу обойти это? Или, возможно, мой подход вообще неверен?