自学内容网 自学内容网

【后端】javaweb过滤器Filter

过滤器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传来的账号有,不为空 即为登录进来的

                放行

        没登录

                不放行(重定向到登录页面)

 在登录后端设置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");
}


原文地址:https://blog.csdn.net/m0_75163045/article/details/143477630

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!