2015-06-16 38 views
1

我正在爲書籍和內容開發Java「JAX-RS」Web服務。會有的網址類似的東西100S ...所有方法的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,這很有幫助。

相關問題