JAX-RS @FormParam 一次用于所有方法

JAX-RS @FormParam one time for all methods

我正在为书籍和内容开发 Java "JAX-RS" Web 服务。将有 100 个类似的 URL ...

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,我在服务器中验证 return 内容或错误。示例代码 ...

@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 种方法中都重复了 @FormParam("authToken")。有没有一种方法可以让我在某个地方只检查一次并从所有方法中删除?非常感谢!

这将在处理之前过滤所需的参数。

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,这很有用。