根据 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
这些选项提供了对请求的验证过程,而无需在所有端点实施它。
再次我不确定这些选项,只是可能对某人有帮助的想法:)
祝你好运
我有自己的 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
这些选项提供了对请求的验证过程,而无需在所有端点实施它。
再次我不确定这些选项,只是可能对某人有帮助的想法:)
祝你好运