2015-06-16 3 views
1

Я разрабатываю веб-службы Java «JAX-RS» для книг и контента. Там будет 100s из URL-адреса что-то подобное ...JAX-RS @FormParam один раз для всех методов

https://api.example.com/v1.3/book1/chapter/1

https://api.example.com/v1.3/book1/chapter/2

...

https://api.example.com/v1.3/book1/chapterN

Для извлечения пользователя содержимого главы, необходимые для POST authToken, который я проверяю на сервере и возвращаю содержимое или ошибка. Образец кода ...

@Path("/book1") 
public class Book1 { 

    @Path("/chapter/{cNum}") 
    public String getMedias(
      @PathParam("cNum") String cNum, 
      @FormParam("authToken") String authToken) { 
     // so here I validate the authToken 
     return "bla bla!"; 
    } 
} 

Это прекрасно работает. Но я повторил во всех 100 таких методах, как описано выше. Есть ли способ, который я могу проверить только один раз и удалить из всех методов? Спасибо огромное!

+2

Вы можете сделать это с помощью WebFilter. – DSF

+0

Спасибо DSF! Теперь он работает с трюком! –

ответ

0

Это будет фильтровать требуемые параметры перед обработкой.

import javax.servlet.*; 
import javax.servlet.annotation.WebFilter; 
import java.io.IOException; 

@WebFilter(urlPatterns = {"/*"}, description = "Filters!") 
public class MyFilter implements Filter { 
    private FilterConfig filterConfig; 

    @Override 
    public void init(FilterConfig filterConfig) throws ServletException { 
     this.filterConfig = filterConfig; 
    } 

    @Override 
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { 
     final String authToken = servletRequest.getParameter("authToken"); 
     if (authToken != null) { 
      // and token is valid ? // etc etc ... 
      filterChain.doFilter(servletRequest, servletResponse); 
     } else { 
      // not valid 
      servletResponse.getWriter().write("No Way! No Token!"); 
     } 
    } 

    @Override 
    public void destroy() { 
    } 
} 

Это полезно, если вы хотите проверить, маркер безопасности или подключение к базе данных или войти URL-адресов перед обработкой запроса.