我在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应用程序的新手,我还没有找到明确的答案。任何建议将不胜感激!
答案 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
}
请记住,引用者是客户端控制的值,可以被欺骗或删除。