@Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { Object user = request.getSession().getAttribute("userid"); Object admin = request.getSession().getAttribute("admin"); if (StringUtils.isEmpty(user) && StringUtils.isEmpty(admin)) { //未登陆,返回首页 request.setAttribute("msg", "没有权限请先登陆"); response.sendRedirect(request.getContextPath() + "/");//重定向 // request.getRequestDispatcher("/").forward(request,response);//转发 return false; } else { //已登陆,放行请求 return true; } }这段代码是什么意思
时间: 2024-04-03 15:36:23 浏览: 97
这段代码是一个拦截器的预处理方法,主要作用是在处理请求之前进行权限校验。具体来说,它首先从请求的 session 中获取用户和管理员的身份信息(通过 "userid" 和 "admin" 属性),然后判断用户和管理员是否均未登录(即身份信息为空)。如果是,则将一个提示信息添加到请求的属性中,并重定向到网站首页;否则,说明已经登录,放行请求。这段代码的作用是保护网站的安全,防止未经授权的用户访问敏感信息等。
相关问题
package com.de.debook.interceptor; import com.de.debook.entity.User; import com.de.debook.constant.WebConstant; import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; @Component public class AuthorityInterceptor implements HandlerInterceptor { // 权限拦截器 @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { HttpSession session = request.getSession(); User user = (User) session.getAttribute(WebConstant.SESSION_KEY_USER); // 用户未登录状态返回登录页面 if (user == null) { response.sendRedirect("/user/login.html"); 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 { } }
这段代码是一个权限拦截器,用于拦截未登录用户的访问。在 preHandle 方法中,首先获取 HttpSession 中的 User 对象,如果 User 为 null,说明用户未登录,此时将请求重定向到登录页面,并返回 false,拦截请求。如果 User 不为 null,说明用户已经登录,放行请求,返回 true。其他两个方法没有实现,不做处理。
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 { } }
这段代码是一个 Java 类,实现了 HandlerInterceptor 接口,并重写了 preHandle、postHandle 和 afterCompletion 方法。这个类用于拦截请求,在用户未登录或者登录失效时,跳转到登录页面或者返回 AJAX 请求。其中,preHandle 方法用于在请求处理之前进行拦截,判断用户是否登录,如果未登录或者登录失效,则根据请求类型进行相应的处理。如果是 AJAX 请求,则返回一个 JSON 格式的字符串,否则重定向到登录页面。postHandle 和 afterCompletion 方法则用于在请求处理之后进行拦截,但是这个类中这两个方法都为空实现。
阅读全文