SSM项目使用拦截器实现登录验证功能

下面是详细讲解“SSM项目使用拦截器实现登录验证功能”的完整攻略:

1.什么是拦截器

拦截器是Spring MVC框架提供的一种拦截器机制。其作用类似于Servlet中的过滤器,即对当前的请求对象和响应对象进行分析,隔离与处理请求及处理响应的过程。

2.实现拦截器的步骤

2.1 创建拦截器

首先,实现一个拦截器要实现HandlerInterceptor接口,并覆盖其三个方法:
- preHandle:在请求处理前进行调用,返回值为boolean类型,如果返回false,则请求终止,不会进入controller方法
- postHandle:在请求进行处理之后,在返回ModelAndView之前进行调用,可以对Controller处理后的ModelAndView进行操作
- afterCompletion:在整个请求处理之后进行调用,无论成功或失败都会执行,可以进行一些资源清除工作等

public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        User user = (User) request.getSession().getAttribute("user");
        if (user == null) {
            response.sendRedirect(request.getContextPath() + "/login");
            return false;
        }
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

    }
}

2.2 配置拦截器

在SpringMVC中对拦截器进行配置需要在mvc-config.xml中加入以下配置,并指定拦截路径和不拦截路径

<mvc:interceptors>
    <mvc:interceptor>
        <mvc:mapping path="/**"/>
        <bean class="com.example.interceptor.LoginInterceptor"/>
    </mvc:interceptor>
</mvc:interceptors>

不拦截路径指的是哪些路径下的请求不需要经过拦截器进行过滤,比如静态资源文件、登录页面等。可在拦截器的preHandle()方法中进行判断并返回false。

示例1:不拦截登录页面

<mvc:interceptors>
    <mvc:interceptor>
        <mvc:mapping path="/**"/>
        <mvc:exclude-mapping path="/login"/>
        <mvc:exclude-mapping path="/static/**"/>
        <bean class="com.example.interceptor.LoginInterceptor"/>
    </mvc:interceptor>
</mvc:interceptors>

示例2:登录成功后重定向到原请求路径
在preHandle()方法中获取当前请求的URI参数,将其存储在session中,在登录成功后从session中取出并执行重定向操作。

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    User user = (User) request.getSession().getAttribute("user");
    if (user == null) {
        request.getSession().setAttribute("url", request.getRequestURI() + "?" + request.getQueryString());
        response.sendRedirect(request.getContextPath() + "/login");
        return false;
    }
    return true;
}

3.注意事项

  • 拦截器仅能拦截经过DispatcherServlet处理的请求,对于其他非DispatcherServlet处理的请求则无法拦截。如:静态文件(如:.jpg/.png/.css等),任何没有被DispatcherServlet处理的请求都会跳过拦截器。
  • 拦截器可以使用@Autowired注解注入其他Bean,如果@Bean注解在拦截器上不会被执行。
  • 如果拦截器中使用了response.sendRedirect()方法,则必须用return false来终止请求的处理,否则请求还是会继续进行。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SSM项目使用拦截器实现登录验证功能 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • Win10怎么设置自动锁屏? win10自动锁屏的两种方法

    以下是Win10设置自动锁屏的完整攻略: 使用Windows设置进行自动锁屏:首先,打开Windows设置。在Windows设置中,选择“账户”选项,然后选择“登录选项”选项。在“登录选项”页面中,找到“屏幕超时”选项。在“屏幕超时”选项中,选择您需要的时间间隔,例如5分钟、10分钟等。在选择时间间隔之后,您的计算机将在设定的时间内处于空闲状态时自动锁屏。 …

    html 2023年5月17日
    00
  • protobuf简单介绍和ubuntu 16.04环境下安装教程

    Protobuf简单介绍和Ubuntu 16.04环境下安装教程 Protobuf简介 Protocol Buffers (简称protobufs) 是 Google 开发的语言无关、平台无关、可扩展的序列化数据格式,常用于数据存储和通讯协议等场景。相比xml json等常见数据格式,他更加简单,更加高效。protobufs的作用是将数据从某个语言中的对象编…

    html 2023年5月30日
    00
  • Asp+Rss阅读器制作第2/2页

    针对“Asp+Rss阅读器制作第2/2页”的完整攻略,我整理了以下步骤: 第一步:搭建本地Web服务器 在本地电脑上搭建Web服务器,可以使用IIS或者Tomcat。在搭建完成后,将网站服务器的根目录设置为静态站点。在本地服务器上创建rss.xml文件,用于存放RSS源数据。同时,设置ASP页面页面,用于生成动态内容并且接收与查询数据的页面。 第二步:编写A…

    html 2023年5月30日
    00
  • 百度推广里中怎么查看网站页面排名?

    以下是“百度推广里中怎么查看网站页面排名?”的完整攻略: 百度推广里中怎么查看网站页面排名? 在百度推广中,可以通过以下步骤查看网站页面排名: 登录百度推广:在浏览器中输入“推广.baidu.com”,进入百度推广登录页面,输入账号和密码登录。 进入推广计划:在百度推广主界面中,选择需要查看排名的推广计划,进入推广计划页面。 进入关键词列表:在推广计划页面中…

    html 2023年5月18日
    00
  • 彻底消灭Flash动画中的乱码

    题目:彻底消灭Flash动画中的乱码 背景 Flash动画相信大家都不陌生,不过在实际制作中,有些汉字容易出现乱码的情况,如果不能及时解决会对用户产生很不好的体验,而且不能及时解决还会降低实际应用的质量。怎样彻底解决这个问题,下面我将分享给大家我的解决方法。 解决办法 问题的产生主要是因为Flash中采用默认编码,造成不同读者环境下输入的字符编码与Flash…

    html 2023年5月31日
    00
  • C# 操作XML文档 使用XmlDocument类方法

    C#中操作XML文档可以使用XmlDocument类方法。下面是使用XmlDocument类方法操作XML文档的完整攻略: 1. 导入命名空间 首先需要导入命名空间:System.Xml using System.Xml; 2. 创建XmlDocument对象 创建XmlDocument对象时,可以调用该类的构造函数。 XmlDocument doc = n…

    html 2023年5月30日
    00
  • springboot中使用groovy的示例代码

    下面是关于Spring Boot中使用Groovy的示例代码的完整攻略: 1. 添加Groovy依赖 在Spring Boot项目的pom.xml文件中添加Groovy依赖: <dependencies> <!– 添加Groovy依赖 –> <dependency> <groupId>org.codehau…

    html 2023年5月30日
    00
  • Mac系统新建TXT文档以及出现乱码的解决办法

    下面是详细讲解Mac系统新建TXT文档以及出现乱码的解决办法的攻略: 1. Mac系统新建TXT文档的方法 Mac系统中新建TXT文档有两种方法: 方法一:使用Finder 打开Finder; 在Finder的顶部菜单栏上选择文件 > 新建文件; 文件名后缀名为txt(例如”test.txt”),然后按下回车键; 双击文件名,即可在TextEdit中打…

    html 2023年5月31日
    00
合作推广
合作推广
分享本页
返回顶部