在Tomcat中检查用户请求

时间:2015-01-13 08:02:14

标签: java web-services tomcat

我有自己的Web服务(Jersey java)和Tomcat 7.现在,为了进行调试,我希望只有当用户在数据库中时才允许访问WS,否则Tomcat拒绝请求,这可能是通过Tomcat配置?

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

由于

1 个答案:

答案 0 :(得分:0)

我不确定Jersy中是否存在此类自定义验证 我发布这个,如果不存在这样的事情,

它主要像是 - 如果我是你 - 建议,

所以,我有2个选项,我可以尝试一下:

1-添加过滤器:这会将所有请求过滤到API网址, 在doFilter(ServletRequest req, ServletResponse res, FilterChain filterChain) throws IOException, ServletException中你可以检查你需要的任何验证,根据你可以让请求通过的验证结果,或者回复一些错误信息check this来获取样本

然后在servlet-filter上将该类声明为web.xml,其网址高于ServletContainer网址,

2-扩展ServletContainer:com.sun.jersey.spi.container.servlet.ServletContainer) 我们知道这个类在web.xml中配置来处理所有传入的请求,然后转发到正确的端点类和方法,所以扩展这个类,在新类中使用自定义容器ex MyServletContainer,只需覆盖方法doFilter()并执行与上面相同的操作 如果验证错误,请回复一些错误,如果通过,只需调用super.doFilter(...)检查this link以获取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

这些选项提供了对请求的验证过程,而不是在所有端点中实现它。

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

祝你好运