我有一个servlet来处理一些请求并相应地发出响应。
因此,如果我需要测试我的servlet运行良好,我只需在浏览器中直接输入url(下面)并检查响应。
http://localhost:8080/jnlpGenerator/create.htm?parameter1=someValue¶meter2=otherValue
测试期间这很好。
但是,我想阻止任何人直接从生产环境中的浏览器发送此URL。这可能吗?此网址仅用于我的基于Web的项目中。因此,当有人点击某个按钮时,它会发布上面的url来访问servlet。
我怎样才能做到这一点?
由于
答案 0 :(得分:1)
考虑编写授权Filter
。
但是,无法确定该请求是手动浏览器请求或按下按钮的结果。您可以编写一些JavaScript函数来创建差异。
答案 1 :(得分:1)
可能的方法:
Referer
http标头,看它是否来自某些源页面。POST
方法,忽略GET
方法(如果在浏览器中输入类型URL则直接发送)但是,您不应该依赖前两种方式,因为许多客户端(wget / curl / flashget / ...)可以伪造Referer
标头或更改其请求方法,如下所示:
wget --referer http://srv/app/src-page --post-data xxx http://srv/app/servlet
答案 2 :(得分:1)
您无法阻止发出网址请求 - 您基本上必须改变互联网的工作方式才能做到这一点。但是,您可以通过禁止访问单个或多个IP地址或确保用户获得授权来阻止servlet处理这些请求。
为了防止未经授权的访问,如其他地方提到的,授权过滤器和`getRemoteAddress()都很有用,但你必须先实现一些基本的东西:
话虽如此,如果您只有一个简单的Web表单或一些同样微不足道的功能,您可能会使用验证码或其他随机令牌来防止滥用:您的服务器将创建一个由两部分组成的随机项目调用表单的时间,其中一个部分在浏览器中显示,例如图像或字符序列,并且只有在包含相应的第二部分时才会处理发送请求。
但是,如果您的项目更复杂,或授权基于用户身份,则必须更深入地了解安全概念,并实施会话处理,身份验证,加密等等。有无数种方法可以做到这一点 - 首先了解Web应用程序安全性,然后查看Java安全框架。