0
点赞
收藏
分享

微信扫一扫

【后端】javaweb过滤器Filter

guanguans 2024-11-06 阅读 17
前端后端

过滤器Filter

实现敏感词、只能通过登录进入页面。

原理

        当我们使用过滤器时,过滤器会对游览器的请求进行过滤,过滤器可以动态的分为3个部分,1.放行之前的代码,2.放行,3.放行后的代码,这3个部分分别会发挥不同作用。

        第一部分代码会对游览器 请求进行第一次过滤,然后继续执行
        第二部分代码就是将游览器请求放行,如果还有过滤器,那么就继续交给下一个过滤器
        第三部分代码就是对返回的Web资源再次进行过滤处理

 过滤器创建

eclipse里可以new一个Filter

其中:

@WebFilter("/*")

放着要过滤的资源,如果想拦所有,那就是*


实现过滤

        前面我们知道,web-inf目录下的文件我们无法通过浏览器访问到,因此做项目时,我们把文件放到他的平行文件里。

        这里,我们要实现只能通过登录进入内容管理系统等页面,把只能通过登录才能进的页面放到 web-inf 目录下。

第二步:

        登录成功时,进入过滤器

第三步:过滤器设置

这是放行的语句

可以选择对资源放行还是不放行。

不放行就是空白。

//放行
			chain.doFilter(request, response);

        想要知道访问哪个资源,用统一资源访问符getRequestURI()  ---->  servlet能用,Filter用不了 (原因:同样都是request,servlet里是HttpServletRequest, 而filter里是ServletRequest, 所以filter是父类 ,servlet是子类。 子类能调用子类的方法,能调用父类的方法。而父类不能调用子类---> 解决办法:强制类型转换。 把父类的强制转换成子类的。)

String requestURI=((HttpServletRequest)request).getRequestURI();

$ 判断访问的资源

 在登录后端设置session传账号

//		设置后端给前端返回的数据为json格式
		response.setContentType("text/json;charset=utf-8");
		//获取前端传过来的参数
		
		String code=request.getParameter("code");
		
		HttpSession session = request.getSession(false);
		if(session!=null) {
			String savedcode=(String) session.getAttribute("verifycode");
			if(savedcode!=null) {
				if(savedcode.equalsIgnoreCase(code)) {
					String acc=request.getParameter("account");
					String pss=request.getParameter("password");
					//拼接sql
					String sql="select count(*) from login where account=\""+acc+"\" and password=\""+pss+"\"";
					//查找
					int num=MysqlUtil.getCount(sql);
					
					
					//返回的数据
					String res="{\"code\":0,\"message\":\"登陆失败\"}";
					if(num>0) {
						res="{\"code\":1,\"message\":\" 登陆成功\"}";
					
						//登陆成功
						session.setAttribute("account", acc);
					}
					//返回数据
					response.getWriter().write(res);
				}else {
					String res="{\"code\":-1,\"message\":\"验证码错误,请重新输入\"}";
					response.getWriter().write(res);
				}
			}
		}
		
	}
if(requestURI.equals("/Lojarro22/")||requestURI.contains("hbu")||requestURI.contains("img")||requestURI.contains("jquery")||requestURI.contains("Hbu")||requestURI.contains("login")||requestURI.contains("Login")||requestURI.contains("CaptchaServlet")||requestURI.contains("upload")) {//不经过登录就能访问的资源
			//放行
			chain.doFilter(request, response);
		}else if(((HttpServletRequest)request).getSession().getAttribute("account")!=null){//需要经过登录才能访问的资源,有登录资源
			//session中的account不为空,即登录进来的
			//放行
			chain.doFilter(request, response);
		}else {
			//不放行
			((HttpServletResponse)response).sendRedirect("login.html");
		}
举报

相关推荐

JavaWeb-Filter过滤器

JavaWeb笔记(8):Filter过滤器

JavaWeb_09_Filter过滤器

【JavaWeb】Filter过滤器 的使用

过滤器filter

Filter过滤器

过滤器-filter

0 条评论