我有自己的Web服务(Jersey java)和Tomcat 7.现在,为了进行调试,我希望只有当用户在数据库中时才允许访问WS,否则Tomcat拒绝请求,这可能是通过Tomcat配置?
因为替代方案是我的WS中的每个API都检查此用户是否存在于db中。
由于
答案 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
这些选项提供了对请求的验证过程,而不是在所有端点中实现它。
再次我不确定这些选项,只是可以帮助某人的想法:)
祝你好运