控制类
package com.you.config;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 登录操作拦截器
* @author: You
* @date: 2024/1/19 12:06
* @description
*/
public class LoginInterceptor implements HandlerInterceptor {
//配置登录操作拦截器
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
/**
* 1.如果需要访问登录页面 -> 放行
* 2.如果进入登录操作页面 -> 放行
* 3.如果用户已经登录 -> 放行
* 4.免密登录已经保存,使用免密登录 -> 放行
* 5.其他情况,需要拦截,跳转到登录页面 -> 跳转回登录页面
*/
//1.如果需要访问登录页面,放行
if (request.getRequestURI().contains("getLogin")){
return true;
}
//2.如果进入登录操作页面,放行
if (request.getRequestURI().contains("doLogin")){
return true;
}
//3.如果用户已经登录,放行
if (request.getSession().getAttribute("user") != null){
return true;
}
//4.免密登录已经保存,使用免密登录,放行
// 4.1获取cookie数据
Cookie[] cookies = request.getCookies();
//非空校验
if (cookies != null && cookies.length>0){
//遍历cookie,找到我们的user信息 username-password
for (Cookie cookie : cookies){
if (cookie.getName().equals("user") && cookie.getValue().contains("-")){
//解析保存的cookie数据
//1.获取cookie完整的字符信息
String value = cookie.getValue();
//2.截取对应的数组保存
String[] split = value.split("-");
//3.获取用户名和密码
String username = split[0];
String password = split[1];
//4.转发请求,进行自动登录
request.getRequestDispatcher("login/doLogin?rem=1&username="+username+"&"+"password="+password).forward(request,response);
//放行请求
return true;
}
}
}
//5.其他情况,需要拦截,跳转到登录页面,拦截请求
request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request,response);
return false;
}
}
MVC配置
<!--配置拦截器,进行拦截请求-->
<mvc:interceptors>
<!--springMVC的登录拦截器,用于拦截所有的请求-->
<!--拦截器主要应用于用户的登录功能-->
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.you.config.LoginInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>