Остановить доступ пользователя к действию Struts2 напрямую? - PullRequest
0 голосов
/ 19 мая 2011

У меня есть следующие действия, определенные в моем 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>

Предполагается, что пользователь сразу переходит на мою страницу home http://localhost:8080/fr/Search.action все работает нормально, но было обнаружено, что некоторыепользователи обращаются к http://localhost:8080/fr/List.action напрямую, без предварительного перехода на страницу поиска, что вызывает проблемы.

Когда пользователь переходит на страницу поиска и вводит критерии и отправляет запрос, только тогда «Список»msgstr "действие должно быть вызвано через атрибут действия формы" стойки ".Я в основном хочу запретить пользователям возможность прямого доступа к действиям «List», «SearchDetails» и «Logoff», если только эти действия не вызываются из моих JSP или кода.

Я новичок в обслуживании /разработка приложений Struts2, и я не нашел четких ответов на этот вопрос.Любые предложения будут с благодарностью!

Ответы [ 2 ]

2 голосов
/ 19 мая 2011

Не хватает нескольких деталей, поэтому ответ будет немного расплывчатым, но действие списка, вероятно, извлекает значения из отправки формы для поиска?Или вытаскивает состояние из сессии?Или ...?

В любом случае, как бы это ни было сохранено, просто проверьте, а затем перенаправьте пользователя на поиск, если состояние не установлено должным образом.

Подробнее о выполнении перенаправлений в стойках2см. например http://www.roseindia.net/struts/struts2/actions/struts-2-redirect-action.shtml

0 голосов
/ 20 мая 2011

Это не элегантное решение, но вы можете попробовать проверить referer, чтобы узнать, кто вызвал действие.Вашему классу действий нужно будет реализовать ServletRequestAware.

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

Помните, что реферер - это управляемое клиентом значение и может быть подделано или удалено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...