京东11.11大促主会场领京享红包更优惠

 找回密码
 立即注册

QQ登录

只需一步,快速开始

Spring框架的拦截器(Interceptor)

2024-10-28 17:08| 发布者: zhaojun917| 查看: 100| 评论: 0

摘要: 文章介绍了如何在SpringMVC中创建自定义登录拦截器,通过实现HandlerInterceptor接口,包括preHandle、postHandle和afterCompletion三个方法,用于权限验证。当用户未登录尝试访问受限资源时,拦截器会将请求重定向 ...
  文章介绍了如何在SpringMVC中创建自定义登录拦截器,通过实现HandlerInterceptor接口,包括preHandle、postHandle和afterCompletion三个方法,用于权限验证。当用户未登录尝试访问受限资源时,拦截器会将请求重定向到登录页面。同时,文章还展示了在前端页面如何显示拦截信息。
摘要由CSDN通过智能技术生成
        SpringMVC的拦截器 与 JavaServlet的过滤器 类似,它主要用于拦截用户的请求并做相应的处理,通常应用于权限认证(保护服务器资源 )、记录请求信息的日志、判断用户是否登录等功能。

自定义登录拦截器
 一、创建一个类并实现HandlerInterceptor接口,这个接口包含了三个方法:preHandle、postHandle和afterCompletion。

boolean preHandle() 方法:

在请求到达目标资源或controller之前执行。当该方法返回值为true时,则允许请求到达目标资源或下一拦截器。当方法返回值为false时,则阻止请求继续访问。

void postHandle()方法:

该方法在请求到达目标资源或controller执行完成以后执行,前提是, boolean preHandle() 方法返回值为true。

void afterCompletion方法:

该方法在服务器渲染页面以后执行,前提是 boolean preHandle() 方法返回值为true。

//util类
@Component
public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //从session中 取出 登录用户
        Object user = request.getSession().getAttribute("loginUser");
        if(user!=null){
            return true;
        }
        /**重定向到 登录页面 */
        response.sendRedirect("/login.html?info=noland");
        return false;
    }
}
 二、注册拦截器类,重写addInterceptors方法

//config类
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
//注册自定义拦截器
       registry.addInterceptor(new LoginInterceptor())
//路径匹配 受限资源拦截范围  访问该范围资源就会被拦截(可以写多个)
               .addPathPatterns("/index.html");
    }
}
三、在登录页面显示拦截信息

window.onload = function () {
    let info = getQuery("info");
    if(info=="noland"){
        $("infoDiv").innerHTML = "请先登录";
    }
}
关闭

站长推荐上一条 /6 下一条

QQ|手机版|小黑屋|梦想之都-俊月星空 ( 粤ICP备18056059号 )

GMT+8, 2025-2-22 16:42 , Processed in 0.024271 second(s), 17 queries .

Powered by Mxzdjyxk! X3.5

© 2001-2025 Discuz! Team.

返回顶部