springboot 拦截器

该文章详细介绍了如何在SpringBoot项目中创建并使用拦截器。首先,自定义了LoginInterceptor,检查session中的uid来判断是否需要重定向到登录页面。其次,通过@Configuration注解的LoginInterceptorConfigurer类注册拦截器,并设置拦截所有请求。最后,排除静态资源和特定URL,避免它们被拦截。测试显示未登录用户访问受保护页面会被重定向至登录页面。
摘要由CSDN通过智能技术生成

在 Spring Boot 项目中,使用拦截器功能通常需要以下 3 步:

  1. 定义拦截器;

  1. 注册拦截器;

  1. 指定拦截规则(如果是拦截所有,静态资源也会被拦截)。

第一步:自定义拦截器

package com.cy.store.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class LoginInterceptor implements HandlerInterceptor {

/**

* 检测全局session对象中是否有uid数据,如果有则放行,如果没有重定向到登录页面

* @param request 请求对象

* @param response 响应对象

* @param handler 处理器(url+controllor:映射)

* @return 如果返回值true 放行 如果是false则表示拦截,重定向到登录页面

* @throws Exception

*/

@Override

public boolean preHandle(HttpServletRequest request,

HttpServletResponse response,

Object handler) throws Exception {

// HttpServletRequest对象获取session对象

Object obj = request.getSession().getAttribute("uid");

if(obj == null){

//说明用户没有登录过系统,则重定向到login.html页面

response.sendRedirect("/web/login.html");

//结束后续的调用

return false;

}

// 请求放行

return true;

}

}

第二步:注册拦截器(需要@Configuration注解,自动注入,否则不生效

package com.cy.store.config;

import com.cy.store.interceptor.LoginInterceptor;

import org.springframework.context.annotation.Configuration;

import org.springframework.web.servlet.HandlerInterceptor;

import org.springframework.web.servlet.config.annotation.InterceptorRegistry;

import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.util.ArrayList;

import java.util.List;

@Configuration

public class LoginInterceptorConfigurer implements WebMvcConfigurer {

// 将自定义拦截器注册

@Override

public void addInterceptors(InterceptorRegistry registry) {

HandlerInterceptor interceptor = new LoginInterceptor();

registry.addInterceptor(interceptor) .addPathPatterns("/**")

}

}

第三步:指定拦截规则

package com.cy.store.config;

import com.cy.store.interceptor.LoginInterceptor;

import org.springframework.context.annotation.Configuration;

import org.springframework.web.servlet.HandlerInterceptor;

import org.springframework.web.servlet.config.annotation.InterceptorRegistry;

import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.util.ArrayList;

import java.util.List;

@Configuration

public class LoginInterceptorConfigurer implements WebMvcConfigurer {

// 将自定义拦截器注册

@Override

public void addInterceptors(InterceptorRegistry registry) {

HandlerInterceptor interceptor = new LoginInterceptor();

//配置白名单,存到一个集合中

List<String> patterns = new ArrayList<>();

patterns.add("/bootstrap3/**");

patterns.add("/css/**");

patterns.add("/images/**");

patterns.add("/js/**");

patterns.add("/web/register.html");

patterns.add("/web/login.html");

patterns.add("/web/index.html");

patterns.add("/web/product.html");

patterns.add("/users/reg");

patterns.add("/users/login");

registry.addInterceptor(interceptor)

.addPathPatterns("/**") // 拦击所有

.excludePathPatterns(patterns); //排除参数外的都拦截

}

}

项目目录

测试:登入http://localhost:***/web/password.html,会跳转到登入页面http://localhost:***/web/login.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值