首页 / 技术 / 正文

SpringMVC中对于session的存取

2017年02月19日 3 条评论 ... 技术

使用 SpringMVC 编写常见的 Web 应用,一般会涉及到页面访问权限方面的知识,包括用户的登录,用户的注册和用户的注销等操作。在 Spring 家族中有一款专门应对这方面的组件,叫做 Spring Security,不过由于网络上可供参考的材料太少,Spring Security 不是特别流行。所以在使用 SrpingMVC 编写 Web 应用的时候,可以手动操作 session ,来识别用户,控制用户的访问权限。

SpringMVC中设置 session

SpringMVC中设置 session 方式比较简单,需要在 Spring MVC 中的页面控制器(Controller)中进行设置。一般来讲,session 只需要在用户相关的页面控制器中申明即可。

设置步骤:

1.设置注解

注解为@SessionAttributes("userInfo"),注解中的值即为要设置的 session 的名称;注解的位置在整个类的类名之前,与注解@Controller位置相同。

2.代码中添加入session内容

为session中添加内容与再 Model 中添加页面传递参数一样,唯一要求就是,设置 Model 的名称要与注解中声明的名称一样。例如可以这样写

  1. model.addAttribute("userInfo", res.getUser()); 

这样名为 userInfo 的 session 就设置成功了。

简单的例子如下:

  1. @Controller 
  2. @RequestMapping("/user")  
  3. @SessionAttributes("userInfo")  
  4. public class UserController {  
  5.     @Autowired 
  6.     UserEntryImpl userEntry;  
  7.  
  8.     Logger log = Logger.getLogger(this.getClass());  
  9.  
  10.     // 显示登陆页面  
  11.     @RequestMapping("/login")  
  12.     public String login(Model model) {  
  13.         return "login.page";  
  14.     }  
  15.  
  16.     // 处理登陆动作  
  17.     @RequestMapping(value = "dologin", method = RequestMethod.POST)  
  18.     public @ResponseBody RespLogin dologin(@Valid ReqUserLogin user, Model model) {  
  19.         RespLogin res = new RespLogin();  
  20.         res = userEntry.login(user);  
  21.         // 判断数据库中是否有正确返回  
  22.         if (res.getCode() == "0") {  
  23.             // 设置session  
  24.             model.addAttribute("userInfo", res.getUser());  
  25.         }  
  26.         return res;  
  27.     }  

SpringMVC 中读取session

设置完成了 session 之后,便可以在整个 web 会话中随时访问session。

1.在 class 类中取出 session

class 中取出的形式依然是通过 Model,代码如下:

  1. model.asMap().get("userInfo"); 

这里使用了 Model 中的asMap()方法,将值转换为 Map,然后根据名称取出。

2.在 jsp 页面中取出 session

jsp 页面中直接使用 sessionScope 内的方法可以方便的取出。这是一个 EL 表达式,所以要用 ${} 来装饰。案例中是取出 userInfo 类中的用户名:username.

  1. ${sessionScope.userInfo.username} 

SpringMVC 中注销session

注销可以借助 SessionStatus 参数,直接使用其中的setComplete()方法,案例如下:

  1. // 用户登出动作  
  2. @RequestMapping(value = "/logout", method = RequestMethod.GET)  
  3. public String logout(SessionStatus sessionStatus) {  
  4.     sessionStatus.setComplete();  
  5.     return "login.page";  

3 条评论

Loading...
  1. 姜辰

    专业!

    2017-02-19 [回复]
  2. 冷宫小贱

    qqqqq加

    2017-02-23 [回复]
  3. 企业管理培训

    支持支持

    2017-02-24 [回复]

发布评论