限制struts2中的直接URL访问

时间:2013-12-01 11:38:21

标签: struts2

我正在使用struts2开发业务应用程序。 我想限制直接访问网址。 如果用户通过浏览器URL直接访问操作,则不要单击该链接, 我想显示错误页面。(您不能使用网址直接访问。)

如果有人有解决方案,请与我分享。 谢谢。

3 个答案:

答案 0 :(得分:1)

要求很奇怪&我不明白背后的原因。

但是让我解释一下如何实现这样的功能:

  1. 当发出直接网址请求时,请求中不会显示Referer标头。

  2. 您可以简单地编写一个拦截器来检查传入的请求是否具有Referer标题&它来自你的域名。如果不是,那么如果是,则可以发送错误然后继续。

  3. 虽然很容易绕过这个,但是大多数用户都不会这样做。

    示例拦截器代码:

    public String intercept(ActionInvocation ai) throws Exception {
            HttpServletRequest request =
                    (HttpServletRequest) ai.getInvocationContext().get(StrutsStatics.HTTP_REQUEST);
            if (request != null) {
                if (request.getHeader("Referer") == null) {
                    return "error";
                }
                return ai.invoke();
            }
    }
    

答案 1 :(得分:0)

用户可以发出请求,这是一个网址。

此网址可以称为

  1. 通过无比链接
  2. 提交表格
  3. 在地址栏中手动输入网址
  4. 使用像commons-http
  5. 这样的库来发出请求
  6. .....
  7. 他们有很多方法。你无法确定应该使用哪一个。您的服务器(Struts Action)接收这些请求并处理它们。

    即使您可以通过链接或按钮识别请求cam,也无法信任它。黑客可以很容易地模仿来自不同来源的请求对象。

    我相信你没有走正确的道路。或者请解释更多。

答案 2 :(得分:0)

您可以检查会话中的特定值,以便确认请求是否为授权请求,您甚至可以检查请求中的某些值,您可以使用JSP中的隐藏字段来实现此目的。检查可以在方法prepare()中完成,在每次调用操作时都会执行,因此在呈现jsp之前,您可以通过在prepare方法中编写逻辑来轻松地重定向到任何页面。使用您想要实现Preparable接口

的prepare方法