SSM项目中使用session

登录方法

@Controller
//先设置session中所需的参数
@SessionAttributes("customer")
public class CustomerController{
    @Autowired
    private UserService service;

    @RequestMapping("/login")
    @ResponseBody
    public Customer login(Customer customer, Model model) {
        //先查询
        Customer loginCustomer = service.login(customer);
        //将当前登录成功后的对象,保存到request和session中
        model.addAttribute("customer",loginCustomer);
        return loginCustomer;
    }
}

登出方法

@RequestMapping("/logout")
public String logout(SessionStatus sessionStatus){
    //sessionStatus.isComplete();得到当前session状态。true表示当前session处于活动状态,false表示处于完成状态
    // sessionStatus.setComplete();将session设置为完成状态
    sessionStatus.setComplete();
    return "redirect:/login";
}

方式二

给项目添加javax.servlet.api依赖,通过给方法添加HttpServeltRequest参数后,获取session使用

<!--导入servlet依赖,session-->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
</dependency>

登录方法

@RequestMapping("/login")
@ResponseBody
//如果当前项目中有javax.servlet包,就能在任何方法中添加HttpServletRequest参数,从而使用其中的属性
public Customer login(Customer customer, HttpServletRequest req) {
    //先查询
    Customer loginCustomer = service.login(customer);
    req.getSession().setAttribute("customer", loginCustomer);
    return loginCustomer;
}

登出方法

@RequestMapping("/logout")
public String logout(HttpServletRequest req) {
    //销毁session
    req.getSession().invalidate();
    return "redirect:/login";
}

无论哪种方式,在页面中都可以使用EL表达式${customer}获取保存在session中的对象

拦截器

每次请求controller时,都要经过的一个类。

当一个SSM项目中有过滤器、拦截器后的执行流程
在这里插入图片描述

拦截器与过滤器的区别

  • 过滤器Filter依赖于servlet容器,能够对所有请求在发送到DispatcherServlet前进行过滤
  • 拦截器Interceptor依赖于springmvc,可以在DispatcherServlet转发请求到某个controller前进行拦截
  • 过滤器和拦截器都可以用于权限控制,过滤器更多用于设置编码、屏蔽敏感词等
  • 过滤器可以在servlet前后起作用,拦截器可以深入到方法前后起作用

实现过程

1.先导入servlet依赖

<!--导入servlet依赖,使用拦截器-->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
</dependency>

2.自定义一个类,实现HandlerInterceptor接口

其中有三个default方法可以重新。

  • preHandle

    • 在发送请求后,DispatcherServlet解析控制器中某个RequestMapping前执行的方法
    • 该方法返回true时,请求才能继续
  • postHandle

    • 在preHandle方法返回值为true后执行
    • 在DispatcherServlet解析控制器中某个RequestMapping后执行,解析视图前执行的方法
  • afterCompletion

    • 在preHandle方法返回值为true后执行
    • 在解析视图后执行的方法

3.在springmvc.xml中配置拦截器

<!--设置拦截器们-->
<mvc:interceptors>
    <!--设置其中一个拦截器-->
    <mvc:interceptor>
        <!--设置要拦截的请求,这里表示拦截一切请求-->
        <mvc:mapping path="/**"/>
        <!--设置不拦截的请求-->
        <!--不拦截静态资源-->
        <mvc:exclude-mapping path="/static/**"/>
        <!--不拦截登录页面-->
        <mvc:exclude-mapping path="/login"/>
        <!--不拦截注册页面-->
        <mvc:exclude-mapping path="/register"/>
        <!--不拦截customer模块-->
        <mvc:exclude-mapping path="/customer/**"/>
        <!--注入自定义的拦截器类-->
        <bean class="com.hqyj.ssm02.interceptor.AuthInterceptor"></bean>
    </mvc:interceptor>
</mvc:interceptors>

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值