一、什么是防跳墙功能:
防跳墙功能通常指的是防止用户在未完成认证的情况下直接访问受保护资源的功能。在 Web 开发中,这种功能通常被称为“登录拦截”或“身份验证拦截”。
在 Spring MVC 中,实现这种功能通常使用的是“拦截器”(Interceptor)。拦截器可以用来执行预处理或后处理任务,比如身份验证、权限控制等。
二、如何与过滤器结合:
将防跳墙功能写进过滤器中,就相当于所有跳转都要经过过滤器这一层,这样我们就只需要写一次防跳墙就能控制整个项目的跳转。
三、具体操作:
首先我们要创建一个过滤器,具体的写法在这篇文章:https://blog.csdn.net/daibadetianshi/article/details/140869629?spm=1001.2014.3001.5501https://blog.csdn.net/daibadetianshi/article/details/140869629?spm=1001.2014.3001.5501
创建完过滤器就要开始写防跳墙功能:
我们的防跳墙功能建立在session的基础上,先获取用户的session值再根据这个值进行判断;
//获取已有的session会话,即使没有也不自动创建 HttpSession session = ((HttpServletRequest) servletRequest).getSession(false); //获取浏览器导航的地址 String requestURI = ((HttpServletRequest) servletRequest).getRequestURI(); //对网址经行判断
上面的代码完成了过滤器获取session的值和浏览器跳转的网址;
拿到这两个值,我们先对网址进行区分把不需要权限的页面放出来,让用户不会被卡。
先判断是否为不用卡的跳转直接放行:
不会被卡的跳转一般都是登录跳转,验证码跳转,退出登录跳转,登陆失败跳转,登录界面等等。
if (requestURI.endsWith("/huanying.jsp")||requestURI.endsWith("/code")||requestURI.endsWith("/usererror")||requestURI.endsWith("/showlist") ||requestURI.endsWith("/httpuser") ){ //放行 filterChain.doFilter(servletRequest,servletResponse); }
再判断session的值是否够访问的权限:
else if (session==null||session.getAttribute("user")==null){ //初始化write PrintWriter writer = servletResponse.getWriter(); //被拦截时的弹窗,将跳转到登陆界面 writer.write("<script>"+ "alert('请登录');"+ "window.location.href='huanying.jsp'"+ "</script>"); }
如果session为空或不存在,则可以判断用户是非法跳转,没有访问权限。用弹窗告知并跳转到登陆界面。
当session存在且有值时,就说明有权限,是正常登录,过滤器放行。
else if (session !=null &&session.getAttribute("user")!=null){ //放行 filterChain.doFilter(servletRequest,servletResponse); }
四、退出登录:
退出登录就是取消相应的权限,也就是将session变为空。
//获取session HttpSession session = req.getSession(); //将session消除 session.invalidate();
这样我们的session会话就被销毁了。
PrintWriter writer = resp.getWriter(); writer.write( "<script>"+ "alert('退出成功');"+ "window.location.href='huanying.jsp'"+ "</script>" ); }
这样就成功退出了。