2009-10-23 179 views
3

我有一個struts2行動@Secured({"ROLE_ADMIN"})來保護執行方法。在execute方法中,我將一個消息分配給動作的成員變量,然後返回SUCCESS並結束於jsp頁面。在頁面上,我檢索<sproperty>的動作成員變量。彈簧安全和Struts 2

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

我沒有使用過S2應用程序的Spring Security,但屬性標籤會調用'getGreeting()',是否有可能應該註釋?如果是這樣,可能要考慮'ModelDriven'。 – 2011-11-07 01:38:35

回答

1

您必須確保在執行<s:property value="greeting" />之前,您在SecurityContextHolder.getContext()中將「ROLE_ADMIN」作爲授予的權限出現。另外,如果您使用默認的「線程本地」策略來存儲安全上下文,請確保授予的權限已正確存儲在每個請求線程中。例如,如果您在http會話中存儲有關用戶憑證的信息,則需要設置HttpSessionContextIntegrationFilter

作爲最後的手段,如果有可能,你可以做的春季安全攔截一個步驟中,您使用的是由步調試會話,並檢查出的問題是什麼。