2015-07-30 3 views
0

Я разрабатываю проект с использованием AspectJ, где я использую фильтр для HTTP-запросов и ответов. В основном я превращаю этот проект в .jar и использую эту банку в тестовом приложении, где выполняю некоторые тесты безопасности. Когда я объявляю фильтр в тестовом приложении и на его web.xml, он отлично работает, но если я положу его в проект, который я разрабатываю (файл jar), то приложение benchmark не обнаружит его ... I нам сказали, что если вы используете последнюю версию web.xml, вам не нужно объявлять фильтр на web.xml, и он должен автоматически обнаруживать его, но он не работает. Как я могу заставить это работать?Проект, не обнаруживающий фильтр Java

версия Я использую в web.xml это:

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
id="WebApp_ID" version="3.0"> 

класс фильтра:

пакет main.java.filter;

import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileWriter; 
import java.io.IOException; 

import javax.servlet.Filter; 
import javax.servlet.FilterChain; 
import javax.servlet.FilterConfig; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRequest; 
import javax.servlet.ServletResponse; 
import javax.servlet.annotation.WebFilter; 
import javax.servlet.http.HttpServletRequest; 

import main.java.Configuration; 
import main.java.HashTableCreation; 

/** 
* Servlet Filter implementation class MyFilter 
*/ 
@WebFilter("/MyService/*") 
public class MyFilter implements Filter 
{ 


/** 
* Default constructor. 
*/ 
public MyFilter() { 
} 


/** 
* @see Filter#destroy() 
*/ 
public void destroy() { 
    // TODO Auto-generated method stub 

} 

/** 
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain) 
*/ 
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 
    System.out.println("###### FILTER before NO DRIVER..."); 



//  HttpServletRequest req = (HttpServletRequest) request; 
//  
//  String loggedIn = (String) req.getSession().getAttribute("login"); 
//  
//  if (loggedIn == null) 
//  { 
//   req.getRequestDispatcher("notLoggedIn.jsp").forward(request, response);; 
//  }*/ 

    chain.doFilter(request, response); 

    System.out.println("###### FILTER after..."); 

} 


/** 
* @see Filter#init(FilterConfig) 
*/ 
public void init(FilterConfig fConfig) throws ServletException { 
    System.out.println("Initializing filter..."); 



} 

} 

ответ

0

Если у вас есть jar файл в этом случае, это просто библиотека. Контейнер сервлета не ищет в вашем файле jar файла web.xml. Это просто не так, как это работает. Как вы описали, ваш файл web.xml должен ссылаться на фильтр явно, иначе контейнер сервлетов не будет знать, чтобы загрузить его.

Если вы пытаетесь использовать аннотацию на основе загрузки, согласно спецификации, ссылка в this post, он должен быть в WEB-INF/classes или WEB-INF/lib как jar.

+0

привет, спасибо за ваш ответ заранее. Из того, что я прочитал в сообщении, которое вы mencioned, он должен работать, если фрейм находится в тестовом приложении lib или я ошибаюсь? «... или если они упакованы в файл jar, расположенный в WEB-INF/lib в приложении». Я как-то смутился, как я уже сказал, мне сказали, что с последней версией web.xml он должен автоматически обнаруживать фильтр, я имею в виду, что приложение-испытатель имеет самую последнюю версию web.xml (из-за которой у меня причина в том, что я изменил его), он должен автоматически определять фильтр в файле jar, который я импортирую в тестовый проект. Неужели я ошибаюсь? –

+0

@PedroBento Интересно, может ли это проблема с контейнером сервлета. Вы используете Tomcat, Jetty или что? –

+0

im using wildfly (Jboss) ... –

Смежные вопросы