Spring安全性和Struts 2

时间:2009-10-23 10:03:32

标签: java struts spring-security

我有一个带@Secured({"ROLE_ADMIN"})的struts2操作来保护execute方法。在execute方法中,我将一个消息分配给action的成员变量,然后返回SUCCESS并最终在jsp页面上。在页面上,我使用<sproperty>检索actions成员变量。

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 个答案:

答案 0 :(得分:1)

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

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

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

相关问题