|
|
|
@ -1,55 +1,59 @@
|
|
|
|
|
package com.tamguo.web.interceptor;
|
|
|
|
|
|
|
|
|
|
import java.net.URLEncoder;
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
|
|
|
|
|
import java.net.URLEncoder; // 导入用于编码的类
|
|
|
|
|
import javax.servlet.http.HttpServletRequest; // 导入 Http 请求类
|
|
|
|
|
import javax.servlet.http.HttpServletResponse; // 导入 Http 响应类
|
|
|
|
|
import org.springframework.stereotype.Component; // 标记为组件
|
|
|
|
|
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; // 继承的拦截器适配器类
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* MemberInterceptor 类,处理会员相关的拦截器
|
|
|
|
|
*/
|
|
|
|
|
@Component
|
|
|
|
|
public class MemberInterceptor extends HandlerInterceptorAdapter{
|
|
|
|
|
public class MemberInterceptor extends HandlerInterceptorAdapter { // 继承自拦截器适配器
|
|
|
|
|
|
|
|
|
|
/** "重定向 URL"参数名称 */
|
|
|
|
|
private static final String REDIRECT_URL_PARAMETER_NAME = "redirectUrl";
|
|
|
|
|
private static final String REDIRECT_URL_PARAMETER_NAME = "redirectUrl"; // 定义重定向 URL 参数名称
|
|
|
|
|
|
|
|
|
|
/** 默认登录 URL */
|
|
|
|
|
private static final String DEFAULT_LOGIN_URL = "/login.html";
|
|
|
|
|
private static final String DEFAULT_LOGIN_URL = "/login.html"; // 定义默认登录 URL
|
|
|
|
|
|
|
|
|
|
/** 登录 URL */
|
|
|
|
|
private String loginUrl = DEFAULT_LOGIN_URL;
|
|
|
|
|
private String loginUrl = DEFAULT_LOGIN_URL; // 定义登录 URL
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 请求前处理
|
|
|
|
|
*
|
|
|
|
|
* @param request
|
|
|
|
|
* HttpServletRequest
|
|
|
|
|
* @param response
|
|
|
|
|
* HttpServletResponse
|
|
|
|
|
* @param handler
|
|
|
|
|
* 处理器
|
|
|
|
|
* @param request HttpServletRequest
|
|
|
|
|
* @param response HttpServletResponse
|
|
|
|
|
* @param handler 处理器
|
|
|
|
|
* @return 是否继续执行
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
|
|
|
|
|
Object currMember = request.getSession().getAttribute("currMember");
|
|
|
|
|
if (currMember != null) {
|
|
|
|
|
return true;
|
|
|
|
|
} else {
|
|
|
|
|
String requestType = request.getHeader("X-Requested-With");
|
|
|
|
|
if (requestType != null && requestType.equalsIgnoreCase("XMLHttpRequest")) {
|
|
|
|
|
response.addHeader("loginStatus", "accessDenied");
|
|
|
|
|
response.sendError(HttpServletResponse.SC_FORBIDDEN);
|
|
|
|
|
return false;
|
|
|
|
|
} else {
|
|
|
|
|
if (request.getMethod().equalsIgnoreCase("GET")) {
|
|
|
|
|
String redirectUrl = request.getQueryString() != null ? request.getRequestURI() + "?" + request.getQueryString() : request.getRequestURI();
|
|
|
|
|
response.sendRedirect(request.getContextPath() + loginUrl + "?" + REDIRECT_URL_PARAMETER_NAME + "=" + URLEncoder.encode(redirectUrl, "UTF-8"));
|
|
|
|
|
} else {
|
|
|
|
|
response.sendRedirect(request.getContextPath() + loginUrl);
|
|
|
|
|
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 重写预处理方法
|
|
|
|
|
|
|
|
|
|
Object currMember = request.getSession().getAttribute("currMember"); // 获取当前会话中的会员对象
|
|
|
|
|
|
|
|
|
|
if (currMember!= null) { // 如果会员对象不为空
|
|
|
|
|
return true; // 返回 true,继续执行
|
|
|
|
|
} else { // 否则
|
|
|
|
|
|
|
|
|
|
String requestType = request.getHeader("X-Requested-With"); // 获取请求头中的"X-Requested-With"
|
|
|
|
|
|
|
|
|
|
if (requestType!= null && requestType.equalsIgnoreCase("XMLHttpRequest")) { // 如果是 XMLHttpRequest 请求
|
|
|
|
|
response.addHeader("loginStatus", "accessDenied"); // 在响应头中添加登录状态
|
|
|
|
|
response.sendError(HttpServletResponse.SC_FORBIDDEN); // 发送禁止访问错误
|
|
|
|
|
return false; // 返回 false,停止执行
|
|
|
|
|
} else { // 否则
|
|
|
|
|
|
|
|
|
|
if (request.getMethod().equalsIgnoreCase("GET")) { // 如果是 GET 请求
|
|
|
|
|
String redirectUrl = request.getQueryString()!= null? request.getRequestURI() + "?" + request.getQueryString() : request.getRequestURI(); // 获取重定向 URL
|
|
|
|
|
response.sendRedirect(request.getContextPath() + loginUrl + "?" + REDIRECT_URL_PARAMETER_NAME + "=" + URLEncoder.encode(redirectUrl, "UTF-8")); // 发送重定向响应
|
|
|
|
|
} else { // 如果是其他请求
|
|
|
|
|
response.sendRedirect(request.getContextPath() + loginUrl); // 发送重定向响应
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
return false; // 返回 false,停止执行
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|