public class LoginInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { //获取session中存储的登录用户的信息 Admin admin = (Admin) request.getSession().getAttribute("loginAdmin"); Object parentMenu = request.getSession().getAttribute("parentMenu"); Object subMenu = request.getSession().getAttribute("subMenu"); if(admin == null || admin.getUserName() == null || parentMenu == null || subMenu == null){ //判断是否是Ajax请求 获取到请求头中的Ajax参数 String XRequested =request.getHeader("X-Requested-With"); //Ajax请求中带有的参数 String ajaxReq = "XMLHttpRequest"; if(ajaxReq.equals(XRequested)) { Map<String, Object> map = new HashMap<>(1); map.put("result", "IsAdminAjax"); String data = JSON.toJSONString(map); response.getWriter().write(data); return false; } else { System.out.println("拦截请求"); System.out.println("请求地址为:" + request.getRequestURI()); response.sendRedirect(request.getContextPath()+"/system/toTimeOutPage"); } return false; } return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { } }
时间: 2024-02-14 16:23:28 浏览: 47
这段代码是一个 Java 类,实现了 HandlerInterceptor 接口,并重写了 preHandle、postHandle 和 afterCompletion 方法。这个类用于拦截请求,在用户未登录或者登录失效时,跳转到登录页面或者返回 AJAX 请求。其中,preHandle 方法用于在请求处理之前进行拦截,判断用户是否登录,如果未登录或者登录失效,则根据请求类型进行相应的处理。如果是 AJAX 请求,则返回一个 JSON 格式的字符串,否则重定向到登录页面。postHandle 和 afterCompletion 方法则用于在请求处理之后进行拦截,但是这个类中这两个方法都为空实现。
相关问题
@Component public class LoginInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String requestURI = request.getRequestURI(); if(requestURI.contains("/login")){ return true; // 放行登录请求 } // 从cookie中获取用户名 String username = null; Cookie[] cookies = request.getCookies(); if (cookies != null) { for (Cookie cookie : cookies) { if ("username".equals(cookie.getName())) { username = cookie.getValue(); break; } } } // 如果cookie中包含用户名,放行 if (username != null) { return true; } // 如果cookie中不包含用户名,跳转到登录页面 response.sendRedirect("/pages/login.html"); return false; } }
这段代码是一个登录拦截器,用于拦截未登录用户的请求。当用户请求的URI不包含/login时,首先从cookie中获取用户名,如果存在用户名则放行请求,否则跳转到登录页面。如果用户请求的URI包含/login,则直接放行请求。
具体流程如下:
1. 判断请求URI是否包含/login。
2. 如果包含,则直接放行请求。
3. 如果不包含,则从cookie中获取用户名。
4. 如果cookie中存在用户名,则放行请求。
5. 如果cookie中不存在用户名,则跳转到登录页面。
6. 返回false,表示拦截该请求。
LoginInterceptor implements HandlerInterceptor
LoginInterceptor是一个实现了HandlerInterceptor接口的拦截器。它可以用于在用户登录之前或之后进行一些预处理或后处理操作。
以下是一个示例代码,展示了如何实现LoginInterceptor:
```java
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
// 在请求处理之前进行拦截操作,例如检查用户是否已登录
// 如果返回false,则请求将被中断,不会继续执行后续的处理器和拦截器
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
// 在请求处理之后进行拦截操作,例如添加一些额外的模型数据
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
// 在请求完成之后进行拦截操作,例如进行一些资源清理工作
}
}
```
在上述代码中,LoginInterceptor实现了HandlerInterceptor接口,并重写了preHandle、postHandle和afterCompletion方法。preHandle方法在请求处理之前被调用,postHandle方法在请求处理之后被调用,afterCompletion方法在请求完成之后被调用。