springboot 拦截器

在 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