【问题标题】:Stop user from accessing a Struts2 action directly?阻止用户直接访问 Struts2 操作?
【发布时间】:2011-05-19 17:59:30
【问题描述】:

我在我的 struts.xml 中定义了以下操作

    <action name="Search" method="prepareLookUpvalues" class="com.mycompany.actions.FrSearchAction">
        <result name="success" type="tiles">search.layout</result>
    </action>

    <action name="List" class="com.mycompany.actions.FrSearchAction">
        <result name="success" type="tiles">results.layout</result>
        <result name="input" type="tiles">search.layout</result>
    </action>

    <action name="SearchDetails" class="com.mycompany.actions.FrSearchDetailsAction">
        <result name="success" type="tiles">details.layout</result>
    </action>

    <action name="Logoff" class="com.mycompany.actions.LogoffAction" >
        <result name="success" type="tiles">logoff.layout</result>
    </action>

假设用户直接访问我的主页 http://localhost:8080/fr/Search.action 一切正常,但发现有些用户直接访问 http://localhost:8080/fr/List.action 而没有先访问导致问题的搜索页面。

当用户进入搜索页面并输入条件并提交时,才应通过 struts 表单的 action 属性调用“List”操作。我基本上想阻止用户直接访问“List”、“SearchDetails”和“Logoff”操作,除非这些操作是从我的 JSP 或代码中调用的。

我是维护/开发 Struts2 应用程序的新手,我还没有找到明确的答案。任何建议将不胜感激!

【问题讨论】:

    标签: java model-view-controller struts2


    【解决方案1】:

    缺少一些细节,所以答案会有点模糊,但列表操作可能会从表单提交中提取值以进行搜索?还是从会话中提取状态?还是……?

    无论如何,如果状态未按预期设置,则只需检查然后将用户重定向到搜索即可。

    有关在 struts2 中进行重定向的详细信息,请参阅,例如http://www.roseindia.net/struts/struts2/actions/struts-2-redirect-action.shtml

    【讨论】:

      【解决方案2】:

      这不是一个优雅的解决方案,但您可以尝试检查 referer 以查看是谁调用了该操作。你的动作类需要实现ServletRequestAware

      String referrer = request.getHeader("referer");
      if (referrer.equals("http://localhost:8080/fr/Search.action")) {
      // do the action
      } else {
      // handle unwanted access 
      }
      

      请记住,referer 是客户端控制的值,可以被欺骗或删除。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多