Cq5.5 aplicando um filtro de servlet a um caminho específico
Estou trabalhando em um manipulador de formulário personalizado no cq5.5 e tudo está indo muito bem. Agora estou trabalhando para bloquear parte da segurança e uma das minhas tarefas é implementar um filtro de controle de solicitações no caminho dos manipuladores de formulários.
Atualmente eu tenho algo como
@Component(immediate = true, metatype = true)
@Service(javax.servlet.Filter.class)
@Properties({
@Property(name="service.pid", value="com.xxxxxx.cq.core.filter.FormFilter",propertyPrivate=false),
@Property(name="service.description",value="FormFilter", propertyPrivate=false),
@Property(name="service.vendor",value="xxxxxx - Microsites", propertyPrivate=false),
@Property(name = "filter.scope", value = "request"),
@Property(name = "sling.filter.scope", value = "request"),
@Property(name = "service.ranking", intValue = 100001)
})
public class FormFilter implements javax.servlet.Filter {
private Logger LOGGER = LoggerFactory.getLogger(TrackingFilter.class.getName());
private static final Object lock = new Object();
@Override
public void doFilter(ServletRequest pRequest, ServletResponse pResponse, FilterChain pChain) throws IOException, ServletException {
//my filter stuff
}
}
Isso funciona bem, mas eu gostaria de bloqueá-lo para executar apenas em um caminho específico.
obrigado por todas as idéias.
---- EDIT ----- Depois de fazer mais pesquisas, encontrei algumas postagens informando que não há como registrar um filtro em um caminho especificado para o manipulador ServletFilter padrão. Basicamente, as duas soluções para esse problema que encontrei foram criar um novo pacote OSGI para o filtro e registrá-lo usando o ExtHTTPService ou o Whiteboard:
http://felix.apache.org/documentation/subprojects/apache-felix-http-service.html
OU
Filtre o URL dentro do próprio filtro. Então, basicamente, adicione uma verificação para o caminho especificado no meu filtro.
ou seja:
@Override
public void doFilter(ServletRequest pRequest, ServletResponse pResponse, FilterChain pChain) throws IOException, ServletException {
String path = pRequest.getContextPath();
if (path.contains("my/matching/path")
{
//my filter stuff
}
}
Gostaria de ver se existem soluções adicionais para esse problema, mas gostaria de compartilhar o que consegui encontrar até agora, na esperança de que isso ajude a estimular mais idéias ou até mesmo ajude alguém com o mesmo problema a economizar alguns tempo na pesquisa do google.
obrigada Brodie