Java 在Tomcat中检查来自请求的用户

Java 在Tomcat中检查来自请求的用户,java,web-services,tomcat,Java,Web Services,Tomcat,我有自己的Web服务Jersey java和Tomcat 7。现在,为了进行调试,我希望仅当用户存在于数据库中时才允许访问WS,否则Tomcat会拒绝请求,这可以通过Tomcat配置实现吗 因为另一种选择是我的WS中的每个API检查该用户是否存在于db中 谢谢我不确定Jersy中是否存在此类自定义验证 我在发这篇文章,以防不存在这样的东西 这主要是一个-如果我是你-建议 因此,我在这里有两个选项可以尝试: 1-添加筛选器:这将筛选API url中的所有请求, 就在doFilterServletR

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

因为另一种选择是我的WS中的每个API检查该用户是否存在于db中


谢谢

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

这主要是一个-如果我是你-建议

因此,我在这里有两个选项可以尝试:

1-添加筛选器:这将筛选API url中的所有请求, 就在doFilterServletRequest req、ServletResponse res、FilterChain FilterChain throws IOException、ServletException中,您可以根据验证结果检查所需的任何验证,您可以让请求通过,或者对示例响应一些错误消息

然后将该类声明为web.xml中高于ServletContainer url的url上的servlet筛选器

2-扩展ServletContainer:com.sun.jersey.spi.container.servlet.ServletContainer 正如我们所知,该类在web.xml中配置为处理所有传入的请求,然后转发到适当的端点类和方法,因此在新类中使用自定义容器ex、MyServletContainer扩展该类,只需重写方法doFilter,并执行与上述相同的操作 在验证错误的情况下,响应一些错误,在通过的情况下,只需调用super.doFilter。。。检查Jersy ServletContainer信息

然后在web.xml上,只需将新类配置为容器

扩展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
这些选项为请求提供了一个验证过程,而无需在所有端点中实现它

同样,我也不确定这些选项,只是一些可能对某人有所帮助的想法:


祝您好运

您如何从请求中获取用户?通过某些ID或令牌或…?例如,用户请求有一些参数,其中一个参数是IMEI,我有一个带有这个IMEI的数据库,Tomcat可以从请求中获取这个参数IMEI吗?在数据库里登记?或者,如果可能的话,只通过WS?检查这张泽西安全卡,好的,所以我必须在WS中工作。谢谢!