1、登录拦截器类
package com.wei.base.admin.interceptor;
import ch.qos.logback.classic.spi.LoggerContextListener;
import com.alibaba.fastjson.JSON;
import com.wei.base.bean.CodeMsg;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.nio.charset.CoderResult;
/**
* 登录拦截器
*/
@Component
public class LoginInterceptor implements HandlerInterceptor {
private Logger log = LoggerFactory.getLogger(LoginInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object handle){
String requestURI = request.getRequestURI();
HttpSession session = request.getSession();
Object user = session.getAttribute("user");//获取登录用户
//用户还未登陆或者session失效,重定向到登录页面
if (user == null){
log.info("用户还未登陆或者session失效,重定向到登录页面,当前URL=" + requestURI);
//首先判断是否是ajax请求
String header = request.getHeader("X-Requested-With");
if ("XMLHttpRequest".equals(header)) {
//表示是ajax请求
try {
response.setCharacterEncoding("UTF-8");
response.getWriter().write(JSON.toJSONString(CodeMsg.USER_SESSION_EXPIRED));//统一异常返回session失效
} catch (IOException e) {
e.printStackTrace();
}
return false;
}
//下面是说明是普通请求,可直接重定向
//用户还未登陆或者session失效,重定向到登录页面
try {
response.sendRedirect("/system/login");
} catch (IOException e) {
e.printStackTrace();
}
return false;
}
log.info("进入拦截器,链接为:" + requestURI);
return true;
}
}
2、登录拦截器类的配置类
package com.wei.base.config.admin;
import com.wei.base.admin.interceptor.LoginInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.Arrays;
import java.util.List;
/**
* 用来配置拦截器的配置类
*/
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Autowired
private LoginInterceptor loginInterceptor;
//无需拦截的链接集合
List<String> excludePathPatterns = Arrays.asList(
"/system/login",
"/admin/css/**",
"/admin/fonts/**",
"/admin/js/**",
"/admin/images/**",
"/cpacha/generate_cpacha"
);
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(loginInterceptor).addPathPatterns("/**").excludePathPatterns(excludePathPatterns);
}
}