Spring Boot(二):从Session中获取域对象的三种方法
来源:互联网 发布:淘宝我的购物车打不开 编辑:程序博客网 时间:2024/06/10 11:35
1. 利用@SessionAttribute进行获取
这是最简单直接的方法,可以直接在方法的参数中直接进行注入,如下:
// 可以直接从Session中抓取域对象public Account login(@SessionAttribute Account account) { return account;}
上面的方法虽然简单,但是唯一的缺点是Spring Framework 4.3之前的版本不支持。
2. 利用@SessionAttributes进行获取
与@SessionAttribute不同的是,@SessionAttributes不仅多了一个复数“s”,而且从Spring Framework 2.5版本就开始支持,此外@SessionAttributes还必须注解在类上,这样类里面的所有方法就可以直接通过@ModelAttribute获取域对象,所以总结起来,@SessionAttributes抓取域对象分为两步;
1. 在类上添加注解@SessionAttributes;
2. 在方法的参数中通过@ModelAttribute获取域对象;
@RestController@SessionAttributes("account")public class SecurityContextController { @RequestMapping("/account") public Account login(@ModelAttribute("account") Account account) { return account; }}
此外,我们不妨把@SessionAttributes的官方说明重读一遍,以了解它的真正含义,如下:
This will typically list the names of model attributes which should be transparently stored in the session or some conversational storage, serving as form-backing beans. Declared at the type level, applying to the model attributes that the annotated handler class operates on.
大概意思是@SessionAttributes会列出存储在Session或会话中的域对象,就像表单的后台对象一样提供服务,并且必须注解在类型上,并应用于此类的域对象上。
3. 直接通过Session获取
这个更简单,直接通过HttpSession获取,但需要更多的类型判断与转换代码,如下:
@RequestMapping("/account")public Account account(HttpSession session) { Object obj = session.getAttribute("account"); if(obj instanceof Account) { Account account = (Account) obj; return account; } return null;}
为了简化Session的调用,充分利用@ModelAttribute方法的初始化特性,我们还可以改进为如下的形式:
public class SecurityContextController { ThreadLocal<Account> authContext = new ThreadLocal<>(); // 此方法会在每次请求前调用(这个类的处理方法) @ModelAttribute public void initUser(HttpSession session) { Object obj = session.getAttribute("account"); if(obj instanceof Account) { Account user = (Account) obj; authContext.set(user); } } // 现在可直接使用存储的属性 @RequestMapping("/getUser") public AegisUser get() { return authContext.get(); }}
结论
在Spring Boot中,从Session中获取域对象还是比较容易的,唯一可能引起误解或较难使用的只有@SessionAttributes,一定要记住它的二个使用步骤。
阅读全文
0 0
- Spring Boot(二):从Session中获取域对象的三种方法
- 从jdbc中获取连接对象Connection的三种方法
- Spring MVC 中获取session的几种方法
- Spring源码之bean的加载(三)从bean中获取对象
- 获取session对象的两种方法
- 从请求中获取当前用户的三种方法
- 如何在spring普通的bean中获取session对象
- jsp中获取session中user对象的方法
- Java中获取Class对象的三种方法
- Spring boot中Session Factory的使用
- android中获取SharedPreference对象的二种方法
- webwork Action中获取request, response,session对象的方法
- webwork Action中获取request, response,session对象的方法
- struts2 Action中获取request, response,Session对象的方法
- Struts2 action中获取session,request对象的方法
- 从spring容器中获取已经创建好的对象
- hibernate中PO对象的三种状态分析以及session中的一些方法的区别
- spring boot(三):Spring Boot中Redis的使用
- 2017 Multi-University Training Contest
- sc2017新高二&高一模拟赛9 总结
- HDU 6172-Array Challenge
- 红黑树
- 图结构练习——最短路径
- Spring Boot(二):从Session中获取域对象的三种方法
- Linux解压缩文件,安装文件
- HTML5利用canvas绘制动态信号瀑布图
- HDU6181-Two Paths【A*算法or次短路】
- 机器学习之KNN(k-nearest-neighbor)算法
- HDU 1358 Period [kmp]
- 19 插入数据
- 智能指针之使用空指针错误
- 去掉百度地图api图标信息