阻止用户直接访问Struts2操作?

时间:2011-05-19 17:59:31

标签: java model-view-controller struts2

我在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应用程序的新手,我还没有找到明确的答案。任何建议将不胜感激!

2 个答案:

答案 0 :(得分:2)

缺少一些细节,所以答案有点模糊,但列表操作可能会将表单提交中的值拉到搜索中?或者从会话中拉出状态?还是...?

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

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

答案 1 :(得分:0)

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

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

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