我有一个带@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
时,整个事情表现正常并显示设置在成员变量中的消息。
看起来实际的安全性工作正常,但是当通过注释启用时,成员变量(或者动作的实例)不会进入值堆栈。
我看不到任何错误消息。
答案 0 :(得分:1)
您必须确保在执行<s:property value="greeting" />
之前,您已将“ROLE_ADMIN”作为SecurityContextHolder.getContext()
中授予的权限提供。
此外,如果使用存储安全上下文的默认“线程本地”策略,请确保授予的权限正确存储在每个请求线程中。例如,如果您在http会话中存储有关用户凭据的信息,则需要HttpSessionContextIntegrationFilter
设置。
作为最后的手段,如果你有可能,你可以在你正在使用的Spring Security Interceptor中逐步调试会话并查看问题所在。