Spring mvc之SessionAttributesHandler類

管理通過@SessionAttributes聲明的控制器特定會話屬性伦仍。實際存儲被委派給SessionAttributeStore 實例。

當(dāng)用@SessionAttributes 注釋的控制器將屬性添加到模型中時很洋,這些屬性將根據(jù)@sessionAttribute指定的名稱和類型進行檢查充蓝。匹配的模型屬性保存在HTTP會話中,并保留在那里喉磁,直到控制器調(diào)用SessionStatus

    private final Set<String> attributeNames = new HashSet<>();

    private final Set<Class<?>> attributeTypes = new HashSet<>();

    private final Set<String> knownAttributeNames = Collections.newSetFromMap(new ConcurrentHashMap<>(4));

    private final SessionAttributeStore sessionAttributeStore;

1.1 SessionStatus接口

可以注入處理程序方法的簡單接口谓苟,允許它們發(fā)出會話處理完成的信號。然后协怒,處理程序調(diào)用程序可以跟蹤適當(dāng)?shù)那謇砝员海缭谔幚沓绦蛱幚砥陂g隱式創(chuàng)建的會話屬性(根據(jù)@SessionAttributes注釋)。
實現(xiàn)類SimpleSessionStatus

1.2 @SessionAttributes注解

表示特定處理程序使用的會話屬性的注釋孕暇。

這通常會列出模型屬性的名稱仑撞,這些屬性應(yīng)該透明地存儲在會話或一些會話存儲中,用作表單備份bean妖滔。在類型級別聲明隧哮,應(yīng)用于帶注釋的處理程序類操作的模型屬性。

注意:使用此注釋指示的會話屬性對應(yīng)于特定處理程序的模型屬性座舍,透明地存儲在會話會話中沮翔。一旦處理程序指示會話會話會話完成,這些屬性將被刪除簸州。因此鉴竭,對于這些會話屬性歧譬,可以使用此工具,這些屬性應(yīng)該在特定處理程序的會話過程中臨時存儲在會話中搏存。

對于永久會話屬性瑰步,例如用戶身份驗證對象,使用傳統(tǒng)的session.setAttribute 方法璧眠∷踅梗或者,考慮使用泛型的屬性管理功能org.springframework.web.context.request.WebRequest 接口责静。

注意:當(dāng)使用控制器接口時(例如用于AOP代理)袁滥,請確保一致地將所有映射注釋(如@RequestMapping和@SessionAttributes)放在控制器接口上,而不是放在實現(xiàn)類上灾螃。

2. SessionAttributeStore接口

在后端會話中存儲模型屬性的策略接口题翻。

接口定義如下:

public interface SessionAttributeStore {

    void storeAttribute(WebRequest request, String attributeName, Object attributeValue);

    @Nullable
    Object retrieveAttribute(WebRequest request, String attributeName);

    void cleanupAttribute(WebRequest request, String attributeName);

}

2.1 storeAttribute方法

將提供的屬性存儲在后端會話中。
可以為新屬性和現(xiàn)有屬性調(diào)用腰鬼。在后一種情況下嵌赠,這表示屬性值可能已被修改。

2.2 retrieveAttribute方法

從后端會話檢索指定的屬性熄赡。
調(diào)用該方法時姜挺,通常期望屬性已經(jīng)存在,如果該方法返回null彼硫,則拋出異常炊豪。

2.3 cleanupAttribute方法

清除后端會話中的指定屬性。
指示屬性名稱將不再使用拧篮。

2.4 attributeNamePrefix屬性

指定用于后端會話中屬性名稱的前綴词渤。
默認(rèn)設(shè)置是不使用前綴,以與模型中相同的名稱存儲會話屬性串绩。

2.5 實現(xiàn)類DefaultSessionAttributeStore

SessionAttributeStore接口的默認(rèn)實現(xiàn)掖肋,將屬性存儲在WebRequest會話(即HttpSession)中。

3. WebRequest接口

4. ServletWebRequest類

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末赏参,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子沿盅,更是在濱河造成了極大的恐慌把篓,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腰涧,死亡現(xiàn)場離奇詭異韧掩,居然都是意外死亡,警方通過查閱死者的電腦和手機窖铡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門疗锐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來坊谁,“玉大人,你說我怎么就攤上這事滑臊】谏郑” “怎么了?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵雇卷,是天一觀的道長鬓椭。 經(jīng)常有香客問我,道長关划,這世上最難降的妖魔是什么小染? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮贮折,結(jié)果婚禮上裤翩,老公的妹妹穿的比我還像新娘。我一直安慰自己调榄,他們只是感情好踊赠,可當(dāng)我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著振峻,像睡著了一般臼疫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上扣孟,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天烫堤,我揣著相機與錄音,去河邊找鬼凤价。 笑死鸽斟,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的利诺。 我是一名探鬼主播富蓄,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼慢逾!你這毒婦竟也來了立倍?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤侣滩,失蹤者是張志新(化名)和其女友劉穎口注,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體君珠,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡寝志,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片材部。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡毫缆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出乐导,到底是詐尸還是另有隱情苦丁,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布兽叮,位于F島的核電站芬骄,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏鹦聪。R本人自食惡果不足惜账阻,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望泽本。 院中可真熱鬧淘太,春花似錦、人聲如沸规丽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赌莺。三九已至冰抢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間艘狭,已是汗流浹背挎扰。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留巢音,地道東北人遵倦。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像官撼,于是被迫代替她去往敵國和親梧躺。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內(nèi)容