3

我有一个@Secured({"ROLE_ADMIN"})用于保护执行方法的 struts2 操作。在执行方法中,我将消息分配给操作的成员变量,然后返回 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被删除时,整个事情会正常运行并显示设置到成员变量中的消息。

看起来实际的安全性工作正常,但是当通过注释启用时,成员变量(或者可能是操作的实例)并没有进入值堆栈。

我看不到任何错误消息。

4

1 回答 1

1

您必须确保在<s:property value="greeting" />执行之前,您将“ROLE_ADMIN”作为授予权限存在于SecurityContextHolder.getContext().

此外,如果您使用默认的“线程本地”策略来存储安全上下文,请确保授予的权限正确存储在每个请求线程中。例如,如果您将有关用户凭据的信息存储在 http 会话中,则需要进行HttpSessionContextIntegrationFilter设置。

作为最后的手段,如果有可能,您可以在您正在使用的 Spring Security Interceptor 中进行逐步调试会话并检查问题所在。

于 2009-11-06T07:34:14.937 回答