Spring security and Struts 2 - PullRequest
       20

Spring security and Struts 2

3 голосов
/ 23 октября 2009

У меня есть действие struts2 с @Secured({"ROLE_ADMIN"}) для защиты метода execute. В методе execute я назначаю сообщение переменной-члену действия, затем возвращаю SUCCESS и в итоге оказываюсь на странице jsp. На странице я получаю переменную члена действия с <sproperty>.

private String greeting;

public String execute() throws Exception {
    this.greeting="Hello";
    return SUCCESS;
}

// getters and setters for greeting
...

<s:property value="greeting" />

Проблема в том, что при наличии защищенной аннотации jsp ничего не показывает для переменной-члена, но когда @Secured удаляется, все работает правильно и показывает сообщение, которое было установлено в переменной-члене.

Похоже, что действительная защита работает нормально, но когда она включена через аннотацию, переменная-член (или, возможно, экземпляр действия) не попадает в стек значений.

Я не вижу сообщений об ошибках.

1 Ответ

1 голос
/ 06 ноября 2009

Необходимо убедиться, что перед выполнением <s:property value="greeting" /> у вас есть "ROLE_ADMIN" в качестве предоставленного права доступа в SecurityContextHolder.getContext().

Кроме того, если вы используете стратегию по умолчанию «локальный поток» для хранения контекста безопасности, убедитесь, что предоставленные полномочия правильно хранятся в каждом потоке запросов. Например, если вы храните информацию об учетных данных пользователя в сеансе http, вам необходимо настроить HttpSessionContextIntegrationFilter.

В крайнем случае, если у вас есть такая возможность, вы можете выполнить пошаговый сеанс отладки в используемом вами перехватчике Spring Security и проверить, в чем проблема.

...