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

标签 java web-services jakarta-ee jax-rs java-ee-6

我正在为书籍和内容开发 Java“JAX-RS”Web 服务。将会有数百个类似的 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 的章节内容,我在服务器中验证并返回内容或错误。示例代码...

@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() {
    }
}

如果您想在处理请求之前检查安全 token 或数据库连接或日志 URL,这会很有帮助。

关于java - JAX-RS @FormParam 一次用于所有方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30874702/

相关文章:

java - 手动按升序对数组进行排序

java - 如何在 Android 中支持 unicode 字体?

web-services - 第一次调用 Web 服务很慢;由紧凑框架 win app 消耗

java - 如何检索/提取 XML 元素属性值

java - 使用 ValueComparator 按值对 Map<Integer, Float> 进行排序会在 Java 8 中出错

c# - 如何将凭据传递给 SOAP Web 服务?

java - 打包和部署企业应用程序的现代替代方案?

jakarta-ee - 如何在 WildFly 中覆盖 resource-ref

java - 模拟对象返回实际数据

java - 告诉 Gradle 检查两个目录中的主要 java 源代码