根据 Tomcat 中的请求检查用户

Check user from request in Tomcat

我有自己的 Web 服务(泽西岛 java)和 Tomcat7。现在,为了进行调试,我希望仅当用户存在于数据库中时才允许访问 WS,否则Tomcat 拒绝请求,可以通过 Tomcat 配置吗?

因为替代方案是我的 WS 中的每个 API 检查此用户是否存在于数据库中。

谢谢

我不确定 Jersy 中是否存在此类自定义验证 我发布这个,以防不存在这样的东西,

主要是 - 如果我是你的话 - 建议,

所以,我这里有 2 个选项,我可以尝试继续:

1- 添加过滤器: 这将过滤所有请求,到 API url, 就在 doFilter(ServletRequest req, ServletResponse res, FilterChain filterChain) throws IOException, ServletException 中,您可以检查您需要的任何验证,根据验证结果,您可以让请求通过,或者使用一些错误消息进行响应,check this 示例

然后声明 class 为 servlet-filter in web.xml on a url higher than ServletContainer url,

2- 扩展 ServletContainer: (com.sun.jersey.spi.container.servlet.ServletContainer) 正如我们所知,此 class 在 web.xml 中配置为处理所有传入请求,然后转发到正确的端点 class 和方法,因此使用自定义容器扩展此 class,例如,MyServletContainer 在新的 class 中,只需覆盖方法 doFilter() 并执行与上面相同的操作 如果验证错误,响应一些错误,如果通过,只需调用 super.doFilter(...) 检查 this link Jersy ServletContainer 信息

然后在 web.xml 将新的 class 配置为容器

扩展 ServletContainer 的示例:

public class MyServletContainer extends com.sun.jersey.spi.container.servlet.ServletContainer{

    @override
    public void doFilter(javax.servlet.http.HttpServletRequest request,
                 javax.servlet.http.HttpServletResponse response,
                 javax.servlet.FilterChain chain)
          throws java.io.IOException,
                 javax.servlet.ServletException {

                //get param from request
                //connect to DB or any cache system to validate the param value

                //if validation fail: do something like this [NOT TESTED NEED SOME TRY and ERROR...]
                if(!dataSrc.isValidUser(paramValue)){
                    PrintWriter out= response.getWriter();
                    out.println("{"status":"fail","message":"invalie user info"}");
                    out.flush();//maybe ...
                }else {
                    //validation is OK, so keep doing what original ServletContainer (super) should do
                    super.doFilter(request, response, chain);
                 }
    }//doFilter() --end

}//CLASS

这些选项提供了对请求的验证过程,而无需在所有端点实施它。

再次我不确定这些选项,只是可能对某人有帮助的想法:)

祝你好运